我需要测试当用户错误输入两个标点符号时 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 处理“!.”在字符串中并按原样传递它?
感谢您的帮助
答案1
这就是历史扩展。您可以通过使用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