Почему в этом случае тильда не распознается как домашняя папка?

Почему в этом случае тильда не распознается как домашняя папка?

Это не работает:

$ 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

Но это так:

$ 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

Учитывая, что это ~должно быть то же самое /home/daniel, что и , что здесь происходит?

решение1

Кавычки, даже двойные, подавляют расширение тильды.

~может быть использованкак путь к вашему домашнему каталогув контекстах, гдерасширение тильдывыполняется. ~не похоже.или... На самом деле в вашей файловой системе нет записей, ~которые бы служили альтернативными именами для вашего домашнего каталога.

Когда ~появляется сам по себе или как первый компонент пути, ваша оболочка расширяет его вабсолютный путьв ваш домашний каталог. Но этого не происходит, когда ~цитируется.Двойные кавычкиобеспечивают более слабую формуцитированиечемодинарные кавычки, что важно для некоторых других видоврасширение, такой какрасширение параметра(который расширяется $HOME). Но даже двойные кавычки подавляют расширение тильды.

Таким образом ~, в этой команде это не было раскрыто, хотя и цитируется:

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

К счастью, разрешено писать аргумент, некоторые части которого цитируются, а некоторые — нет. Так что вы можете поставить ~/перед кавычками, и все равно цитировать остальное:

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

Или, поскольку расширение параметров выполняется даже в двойных кавычках (но не в одинарных), вы можете использовать:

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

(Технически это отличается тем, что даже если HOMEпеременная окружения не установлена, некоторые оболочки все равно пытаются выяснить, какой у вас домашний каталог, и расшириться ~до него, и bashэто одна из таких оболочек. Но это случается редко и нецелесообразно отменять HOMEустановку.)


Дальнейшее чтение:

Связанный контент