這不起作用:
$ 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
引用,即使使用雙引號,也會抑制波形符擴展。
~
可以使用作為您的主目錄的路徑在以下情況下波形符擴充被執行。~
不像.
或者..
。實際上,您的檔案系統中沒有任何條目可以~
用作您的主目錄的備用名稱。
當~
單獨出現或作為路徑的第一個組成部分出現時,您的 shell 會將其擴展為絕對路徑到您的主目錄。但~
引用時不會發生這種情況。雙引號提供較弱的形式引用比單引號,這對於其他一些類型很重要擴張, 例如參數擴充(展開$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
未設定環境變量,某些 shell 仍會嘗試找出您的主目錄是什麼並擴展~
到它 - 並且bash
是這樣的shell 之一。但取消設定既罕見又不建議HOME
。
延伸閱讀: