In base a questa risposta e alla mia comprensione, la tilde si espande nella directory home:
$ echo ~
/home/braiam
Ora, ogni volta che voglio che l'espansione della shell funzioni, io. e. usando nomi di variabili come $FOO
, e non interrompere a causa di caratteri imprevisti, tali spazi, ecc. si dovrebbero usare le virgolette "
:
$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces
Perché questa espansione non funziona con la tilde?
$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path
Risposta accettata:
Il motivo, perché tra virgolette doppie, tilde ~
non ha un significato speciale, è trattato come letterale.
POSIX definisce le virgolette doppie come:
I caratteri racchiusi tra virgolette doppie ( “” ) conservano il
valore letterale di tutti i caratteri all'interno delle virgolette doppie, con l'
eccezione dei caratteri simbolo del dollaro, virgolette e barra rovesciata,
…
La domanda deve garantire che una doppia virgoletta sia preceduta da una
barra rovesciata da includere tra virgolette doppie. Il parametro '@' ha
un significato speciale tra virgolette doppie
Tranne $ , ` , e @ , gli altri caratteri vengono trattati come letterali tra virgolette doppie.