Command-Line

理解 bash 中的驚嘆號 (!)

  • April 7, 2021

我用了

history | less

獲取先前命令的行並從左側的數字中找到我想要重複的行(例如 22)並做了

!22

在命令提示符下,它起作用了——在我當時做的那一行執行命令集。我無法弄清楚驚嘆號在哪裡使用,它在 bash 採取的操作方面代表什麼,以及在哪裡使用它。從文件中我看不到“有形”的解釋。

!呼叫歷史擴展,這是最初出現在C shell中的一個特性,早在你可以指望終端有箭頭鍵的日子裡。如果您將目前命令編號添加到提示符 ( PS1="\!$ ") 中,這將特別有用,這樣您就可以快速查看螢幕以獲取過去命令的編號。

現在您可以使用箭頭鍵和Ctrl-R搜尋命令歷史記錄之類的東西,我認為該功能沒有多大用處。

您可能仍然覺得有用的一個變體是!!,它重新執行上一個命令。就其本身而言,我沒有發現!``!``Enter比 just 更快的 Enter方法,但是當組合成一個更大的命令時它會很有幫助。

**範例:**基於系統的常見飛行員錯誤sudo是忘記了sudo需要額外權限的命令的前綴。新手重新鍵入整個命令。勤奮的學生從 shell 的命令歷史中編輯命令。開明的一類sudo !!

這種方式的處理!在 Bash 中預設在互動式 shell 中啟用,並且可以使用set +o histexpand或禁用set +H。您可以在 Zsh 中使用set -K.

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