Bash
為什麼 Bash 歷史記錄不記錄此命令?
該命令會
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
的行為是不同的。它將保存命令,但缺少歷史擴展。