Según esta respuesta y mi propio entendimiento, la tilde se expande al directorio de inicio:
$ echo ~
/home/braiam
Ahora, cada vez que quiero que funcione la expansión de shell, i. mi. usando nombres de variables como $FOO
, y no rompa debido a caracteres inesperados, tales espacios, etc. se deben usar comillas dobles "
:
$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces
¿Por qué esta expansión no funciona con la tilde?
$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path
Respuesta aceptada:
La razón, porque dentro de comillas dobles, tilde ~
no tiene un significado especial, se trata como literal.
POSIX define las comillas dobles como:
Los caracteres incluidos entre comillas dobles ("" ) preservarán el valor literal
de todos los caracteres dentro de las comillas dobles, con la excepción de
los caracteres de signo de dólar, comilla inversa y barra invertida,
…
La aplicación deberá asegurarse de que una comilla doble esté precedida por una barra invertida
para incluirse entre comillas dobles. El parámetro '@' tiene
un significado especial entre comillas dobles
Excepto $ , ` , y @ , otros caracteres se tratan como literales entre comillas dobles.