問題描述:
//新建一個.c文件 # touch hello.c
//用echo向hello.c寫入內容
# echo "\"hello world!\"" >> hello.c
// 結果報錯: bash: !\: event not found
分析原因:
輸入:
# echo $-
得到:
himBHs
確認是由於 H - histexpand
模式打開了而導致。
命令行下,雙引號里面用了 !
的話,Shell 會以為要執行歷史展開,從而導致報錯。
關於 himBH
,如果不知道啥意思的話,可以戳 《 Linux himBH 簡析 》 了解。
解決方法:
1、關閉 histexpand
# set +H # echo $-
得到:
himBs
再次執行echo命令
# echo "\"hello world!\"" >> hello.c
結果成功
查看hello.c文件內容
# cat hello.c
輸出:
"hello world!"
2、使用單引號
假設H - histexpand
模式仍處於打開狀態,可以使用單引號代替雙引號來解決這個問題
// 用echo向hello.c寫入內容 # echo '"hello world!"' >> test.c // 查看hello.c文件內容
# cat hello.c
輸出:
"hello world!"
我們注意到在單引號中,連雙引號'“' 都不需要加轉義符'\'了。
為什么雙引號執行會出錯,而單引號就不會呢 ?
關於 Linux 各種引號之間的使用區別,可戳 《 Linux 反引號、單引號、雙引號簡析 》 了解。
參考文章: