在這種情況下,為什麼波形符未被識別為主資料夾?

在這種情況下,為什麼波形符未被識別為主資料夾?

這不起作用:

$ 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


延伸閱讀:

相關內容