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 HOME
variable de entorno no está configurada, algunos shells aún intentan descubrir cuál es su directorio de inicio y expandirse ~
a él, y bash
es uno de esos shells. Pero es raro y desaconsejable desarmarlo HOME
. )
Otras lecturas: