奇怪的自動完成行為

奇怪的自動完成行為

嗯...我很困惑,因為我的情況唯一真正的問題是該死的撇號(')。
情況:擴展 PATH 變數會影響單字完成,這取決於附加路徑中是否有撇號。
例子:我有一個具有適當 exe 權限的 exe 檔案(稱為“deadbeef”),其路徑包含 2 個撇號:
/home/malniya/hard'n'soft/soft/gnu-linux/portable/deadbeef-0.6.0
特別是為了一個實驗,我將相同的文件放入
/home/malniya/hardnsoftaa/soft/gnu-linux/portable/deadbeef-0.6.0
如果我將第一個路徑匯出到變數 $PATH,bash 中將不會自動完成,但在第二種情況下會出現。當我在終端機中輸入導出目錄中程式的第一個字母時
死的[TAB]
在第一種情況下沒有完成,但是當我在第二種情況下使用帶有相同單字的 TAB 時 - 它有效。
但是如果我在第一種情況下手動輸入命令“deadbeef” - 它也會執行。
而且,兩者哪個類型命令表明,這兩種情況下都存在 exe 檔案。
所以有什麼問題?為什麼 bash 像這樣處理撇號?

答案1

撇號對於幾乎所有 shell 來說都是特殊字元(shell 是指命令列解釋器的術語,它是讀取您鍵入的內容並執行適當操作的程式)。

簡短回答: 不要這樣做。對於空格,最好避免使用具有特殊意義或特殊字元的檔案名稱。

長答案:如果你想使用撇號,你必須「引用" 它們(使用封鎖 shell 解釋它們的特殊字元)。自動補全功能會在需要時自動引用它們...範例:

(0)samsung-romano:~/tmp/try% touch "hard'n'soft"

引用單引號的一種方法是使用雙引號。 (反之亦然,儘管比這更複雜)。

(0)samsung-romano:~/tmp/try% ls
hard'n'soft

現在如果它寫cat hard並按TAB

(0)samsung-romano:~/tmp/try% cat hard\'n\'soft 

反斜線是引用後面字元的另一種形式。

答案2

好吧,正如 bash_completion 團隊建議的那樣,我已向 bash 團隊報告了這種行為,他們的答案是:
“感謝您的報告。這將在 bash-4.3 中修復。”
看起來這個錯誤已經已知,我們應該等待。

答案3

若要擴展包含撇號的路徑,請在路徑前面新增「。

cd "/home/mallniya/hard

在選項卡擴充中擴展沒有問題。

相關內容