bash double-quotes tilde-expansion

bash - ¿Por qué la tilde(~) no se expande entre comillas dobles?



double-quotes tilde-expansion (1)

Esta pregunta ya tiene una respuesta aquí:

Quiero verificar si la carpeta .git oculta existe o no. Lo primero que pensé fue usar:

if [ -d "~/.git" ]; then echo "Do stuff" fi

Pero el -d aparentemente no busca carpetas ocultas.


El problema tiene que ver con la tilde entre comillas dobles.

Para expandirlo, debe colocar la tilde fuera de las comillas:

if [ -d ~/".git" ]; then # note tilde outside double quotes! echo "Do stuff" fi

O, como alternativa, como comenta hek2mgl a continuación, use $HOME lugar de ~ :

if [ -d "$HOME/.git" ]

Desde POSIX en la expansión de Tilde :

Un "prefijo tilde" consiste en un carácter sin comillas al comienzo de una palabra, seguido de todos los caracteres que preceden al primer sin comillas en la palabra, o todos los caracteres en la palabra si no hay.

Desde POSIX en comillas dobles :

Los caracteres encerrados entre comillas dobles ("") conservarán el valor literal de todos los caracteres dentro de las comillas dobles, con la excepción del signo de dólar, la comilla y la barra invertida de los caracteres, de la siguiente manera:

Puede encontrar más explicaciones en ¿Por qué la tilde (~) no se expande entre comillas dobles? de la pila de Unix y Linux.