GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué la tilde (~) no se expande dentro de comillas dobles?

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.


Linux
  1. ¿Cuándo son necesarias las comillas dobles?

  2. ¿Por qué Printf es mejor que Echo?

  3. ¿Por qué las páginas man de Unix usan dobles acentos graves en lugar de comillas dobles?

  4. ¿Por qué `md5sum` no da el mismo hash que Internet?

  5. ¿Cómo ver la línea de comando exacta que se ejecuta dentro de alguna instancia de Bash?

¿Cuál es la diferencia entre punto y coma y ampersand doble &&?

¿Cotizaciones dentro de Backticks dentro de cotizaciones en Ksh?

¿Por qué Apt-get Autoremove no elimina los núcleos antiguos?

¿Por qué la PC no reproduce DVD?

¿Cuál es el uso de $# en Bash?

¿Por qué el tamaño de la partición de intercambio debe ser el doble del tamaño de la RAM?