Bash
Bash 自動完成提供的文件名與 ls 不同
剛剛發生了一件不可思議的事情。由於一個嚴重的錯字,我輸入了
cp filename.xsl .^?~
是的,沒錯,點插入問號-波浪號!真實比虛構更離奇。
它變得更奇怪了。當我輸入
cat .
然後打
TAB
,我得到./ ../ .^?~
但是當我做一個時
ls -a
,我得到. .. .?~
最後,當我這樣做時
rm .?~
刪除命令這樣提示我:
rm: remove write-protected regular file `.\177~'?
在成功刪除它之前。為什麼插入符號存在的減少?
這是因為插入符號通常用於表示
ctrl
已按下的鍵,或者它是控製字元。您實際鍵入的鍵序列是這樣的:
cp filename.xsl .``ctrl
+V``backspace``~``Enter
您可能正試圖將文件複製到您的主目錄 (
~
)。ctrl
您可以通過鍵入+來重複此操作V``backspace
。你會看到^?
列印在螢幕上。您可以查看具有轉換為C 樣式轉義的非列印字元的文件,如下所示(這
-b
是重要的標誌,但由於您的文件以點開頭,您還需要-a
:$ ls -ab . .. .\177~
沒有 ,
-b
您只會看到它.?~
不是因為它只是省略了^
,而是因為任何非 pritable 字元都顯示為?
. 嘗試touch``ctrl
+V``Enter``foo``Enter
然後ls
。您將看到的文件將是?foo
. 然後ls -b
會顯示\rfoo
。因此,當您
rm .?~
匹配時,因為在這種情況下,?
您鍵入的內容被 shell 解釋為萬用字元以匹配任何單個字元,而不是具體的實際問號。您已使用rm
別名,rm -i
因此它正在確認您的操作,並且在確認您的操作時會顯示 C 樣式的轉義程式碼。