¿Por qué no se reconoce la tilde como carpeta de inicio en este caso?

¿Por qué no se reconoce la tilde como carpeta de inicio en este caso?

Esto no funciona:

$ ls "~/.wine/drive_c/tools/Family Tree v2.0"
ls: cannot access '~/.wine/drive_c/tools/Family Tree v2.0': No such file or directory

Pero esto hace:

$ ls "/home/daniel/.wine/drive_c/tools/Family Tree v2.0"
Dossiers                           Dossiers_orig   Infos.opt      Racines.exe  'Register OCX.bat'   racines.CNT
Dossiers-2019.11.03-11.46.tar.gz   Html            REGSVR32.exe   Racines.hlp   Uninst.isu          readme.txt

Dado que ~se supone que es lo mismo que /home/daniel, ¿qué está pasando aquí?

Respuesta1

Las comillas, incluso con comillas dobles, suprimen la expansión de tilde.

~puede ser usadocomo ruta a su directorio de inicioen contextos dondeexpansión de tildees interpretado. ~no es como.o... En realidad, no hay ninguna entrada en su sistema de archivos llamada ~que sirva como nombres alternativos para su directorio de inicio.

Cuando ~aparece por sí solo o como el primer componente de una ruta, su shell lo expande en uncamino absolutoa su directorio personal. Pero esto no sucede cuando ~se cita.Doble comillasproporcionar una forma más débil decitandoquecomillas simples, que es importante para algunos otros tipos deexpansión, comoexpansión de parámetros(que se expande $HOME). Pero incluso las comillas dobles suprimen la expansión de tilde.

Así ~no se amplió en este comando, donde se cita:

ls "~/.wine/drive_c/tools/Family Tree v2.0"

Afortunadamente, está permitido escribir un argumento cuyas partes se citan y otras no. Así que puedes poner ~/antes de las comillas y aún así citar el resto:

ls ~/".wine/drive_c/tools/Family Tree v2.0"

O, dado que la expansión de parámetros se realiza incluso entre comillas dobles, pero no entre comillas simples, puede utilizar:

ls "$HOME/.wine/drive_c/tools/Family Tree v2.0"

(Técnicamente, eso es diferente, en el sentido de que incluso cuando la HOMEvariable de entorno no está configurada, algunos shells aún intentan descubrir cuál es su directorio de inicio y expandirse ~a él, y bashes uno de esos shells. Pero es raro y desaconsejable desarmarlo HOME. )


Otras lecturas:

información relacionada