2012-10-15 149 views
3

爲什麼這個命令行工作:感嘆號

$ output='Irrelevant'; if [[ $output =~ Something ]]; then echo "I found something in the output." ; fi 

而這一次給我一個奇怪的語法錯誤?

$ output='Irrelevant'; if [[ $output =~ Something ]]; then echo "I found something in the output!" ; fi 
-bash: !": event not found 

從第一個版本的唯一的變化是這句話裏面引號裏迴盪着一個感嘆號結束。 爲什麼Bash在第二個版本中給我這個錯誤?

在如此重要的情況下,這是從bash --version輸出:

GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu) 
+0

相關:https://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash – codeforester

回答

5

你可以用單引號代替雙引號的字符串。

感嘆號調用bash manual中描述的非常有用的歷史擴展功能。

歷史擴展是由歷史擴展字符的外觀引入的,默認爲!。只有\'可用於逃避歷史擴展字符。

例如,執行以單詞mysql類型開始最後的命令是:

!mysql 

或執行包含單詞grep的最後一個命令,輸入:

!?grep 

bash手冊還記錄了history expansion operators的語法。

+0

我其實知道歷史擴張。但沒有連接點。謝謝! – Deleted