Por que o til não é reconhecido como pasta pessoal neste caso?

Por que o til não é reconhecido como pasta pessoal neste caso?

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 HOMEvariá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:

informação relacionada