Bash

為什麼我不能切換到帶引號的虛擬 avfs 目錄?

  • May 19, 2017

我安裝了avfs以便能夠將存檔文件透明地掛載為目錄。我創建了一個掛載點:

mkdir ~/.avfs
avfsd ~/.avfs

從那裡,我可以做得cd ~/.avfs/some/path/foo.tar.gz#/很好。

但是,我注意到如果我用雙引號將路徑括起來,則會cd失敗:

~ $ cd ~/.avfs/usr/local/bin/
~/.avfs/usr/local/bin $ cd "~/.avfs/usr/local/bin/"
bash: cd: ~/.avfs/usr/local/bin/: No such file or directory

為什麼引號很重要?我不希望引號對除了 shell 之外的任何東西都是可見的,但這似乎只發生在涉及~/.avfs. 我能想到的唯一解釋bash是驗證路徑(因為它是虛擬的,所以還不存在),但我無法解釋為什麼引用會導致這種情況。

我正在使用bash4.3.48(1)-release。avfsd版本資訊報告:

FUSE library version: 2.9.4
fusermount version: 2.9.4
using FUSE kernel interface version 7.19

發生的事情是,當您將路徑用雙引號引起來時, ~ 不會被您的 bash 擴展 - 通常程序不知道 ~ 代表您的主目錄!

您可以通過在 bash 中嘗試以下兩個命令來驗證這一點:

# echo ~/test
/home/rabban/test
# echo "~/test"
~/test

引用自:https://unix.stackexchange.com/questions/366005