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.