Non c'è un concetto speciale qui. Invece, tutto nella shell è una stringa letterale, a meno che non si usi esplicitamente un'espansione. Questa decisione di progettazione semplifica l'assegnazione, bene, dei valori letterali, che è il caso d'uso principale delle assegnazioni:
varname=value
non cerca una variabile chiamata value
, ma usa letteralmente la stringa value
. In fondo, la maggior parte dei caratteri "speciali" come + - /
ecc. Non sono speciali in alcun modo: sono solo parte delle parole letterali come i caratteri alfabetici.
La sintassi di espansione ci consente di incorporare facilmente i valori all'interno di un modello, ad es.
echo "Hello ${name}!"
(Si noti che nella shell, virgolette come '…'
o "…"
non delimitano le stringhe, cambiano invece le espansioni applicate - le virgolette singole sopprimono tutte le espansioni e la divisione delle parole, le virgolette sopprimono la divisione delle parole e l'espansione globale ma non espansione variabile, espansione aritmetica (solo Bash) o sostituzione di comando. Le seguenti parole sono equivalenti: foo\ bar
, foo' 'bar
, 'foo bar'
.)
Una conseguenza dell'approccio "tutto è una stringa per impostazione predefinita" è che i programmi che non utilizzano solo stringhe semplici diventano più complicati. La sintassi dell'array di Bash è notoriamente confusa. L'espansione aritmetica è in qualche modo non ovvia. Tuttavia, tali programmi non sono adatti per gli script di shell.
Lettura consigliata: la descrizione POSIX della sintassi e della semantica della shell: link