Isso não 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
Mas isso faz:
$ 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 ~
deveria ser o mesmo que /home/daniel
, o que está acontecendo aqui?
Responder1
A citação, mesmo com aspas duplas, suprime a expansão do til.
~
pode ser usadocomo um caminho para seu diretório inicialem contextos ondeexpansão de tilé desempenhado. ~
não é como.
ou..
. Na verdade, não há nenhuma entrada em seu sistema de arquivos chamada ~
que sirva como nomes alternativos para seu diretório inicial.
Quando ~
aparece sozinho ou como o primeiro componente de um caminho, seu shell o expande em umcaminho absolutopara o seu diretório inicial. Mas isso não acontece quando ~
é citado.Aspas duplasfornecer uma forma mais fraca decitandoqueaspas simples, o que é importante para alguns outros tipos deexpansão, comoexpansão de parâmetros(que se expande $HOME
). Mas mesmo aspas duplas suprimem a expansão do til.
Assim ~
não foi expandido neste comando, onde está citado:
ls "~/.wine/drive_c/tools/Family Tree v2.0"
Felizmente, é permitido escrever um argumento cujas partes sejam citadas e outras não. Então você pode colocar ~/
antes das aspas e ainda citar o resto:
ls ~/".wine/drive_c/tools/Family Tree v2.0"
Ou, como a expansão de parâmetros é executada mesmo entre aspas duplas - mas não entre aspas simples - você pode usar:
ls "$HOME/.wine/drive_c/tools/Family Tree v2.0"
(Tecnicamente isso é diferente, pois mesmo quando a HOME
variável de ambiente não está definida, alguns shells ainda tentam descobrir qual é o seu diretório inicial e expandi-lo ~
para ele - e bash
é um desses shells. Mas é raro e desaconselhável desdefini HOME
-lo. )
Leitura adicional: