Bash

為什麼 Bash 歷史記錄不記錄此命令?

  • April 27, 2016

該命令會printf "#!/bin/bash\n" > t生成一個錯誤(bash: !/bin/bash\n": event not found),但按向上鍵不會呼叫該命令,因此我可以對其進行修改。這是為什麼?

(我在這裡嘗試的可以通過printf "%s\n" '#!/bin/bash' >t我正在嘗試學習 Bash 來完成,並且真的想了解為什麼 bash 歷史記錄沒有擷取前面的printf命令。)

如您所見,該!角色會觸發歷史擴展。這一步發生在命令被保存到歷史之前,以便它可以在擴展已經完成的情況下保存到歷史中。當歷史擴展發生錯誤時,bash 停止處理命令,因此它永遠不會保存到歷史中。

歷史擴展允許將先前的命令或先前命令的一部分替換為目前命令。如果這是在將命令保存到歷史記錄之前完成的,那麼每次執行它可能意味著不同的東西,因為之前的命令在每個實例中都是不同的。見http://www.gnu.org/software/bash/manual/bashref.html#History-Interaction

作為參考,zsh的行為是不同的。它將保存命令,但缺少歷史擴展。

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