Bash
如何包含“!”。在傳遞給從 Bash 命令行呼叫的腳本的字元串參數中
當使用者錯誤地輸入兩個標點符號時,我需要測試 python TTS 程序如何反應。
所以我需要檢查“C’est un test!”這句話。(注意**!.**最後)。
因此我在提示時輸入
$ python3 /home/user1/TTS/bin/synthesize.py --text "C'est un test!."
但是 Bash 然後顯示:
python3 /home/user1/TTS/bin/synthesize.py –text “這是一個測試。/configure”
(注意“!.”如何變成“./configure”)。
“這是一個測驗!” (沒有句點)有效,但我需要測試“!。”。
我嘗試用單引號替換雙引號但沒有成功,我嘗試並轉義了“!” 帶有 "" 但它包含在發送到 TTS 庫的句子中。
我明白 ”!” 在 Bash 中具有特殊含義(這裡很好解釋)並與“。”相關聯。它使用先前的命令。
有沒有辦法阻止 Bash 處理“!”。在字元串中並按原樣傳遞?
謝謝你的幫助
那就是歷史擴展。您可以通過使用
set +H
orset +o histexpand
或設置$histchars
為空字元串來完全禁用它,或者在這裡您可以使用單引號而不是雙引號。在引號之外,也可以通過添加前綴來禁用歷史!
擴展\
。根據
set --help
bash:-o option-name
設置option-name對應的變數:
$$ … $$
histexpand 與 -H 相同
$$ … $$
-H
啟用!樣式歷史替換。當 shell 是互動式的時,這個標誌預設是打開的。
$$ … $$
使用 + 而不是 - 會導致這些標誌被關閉。
您可以嘗試執行這些命令來檢查差異:
set -H $> echo "hello!." $> echo "hello!1" $> !2 $> !3 set +H $> echo "hello!." $> echo "hello!1" $> !2 $> !3