zsh或bash是否有引用英文文本的引号?

Owe*_*wen 15 bash quotes zsh escaping

如果我使用单引号,带撇号("不要")的单词很难逃脱:

'Don'"'"'t do that'
Run Code Online (Sandbox Code Playgroud)

如果我使用双引号,美元符号和惊叹号将其绊倒:

"It cost like \$1000\!"
Run Code Online (Sandbox Code Playgroud)

我可以使用另一种引用吗?

编辑:我还应该补充一点,我想直接将此字符串作为命令行参数传递,而不是将其存储在变量中.为此,我尝试使用DigitalRoss的解决方案,

$ echo "$(cat << \EOF 
Don't $worry be "happy".
EOF)"
Run Code Online (Sandbox Code Playgroud)

但得到

dquote cmdsubst> 
Run Code Online (Sandbox Code Playgroud)

点击后输入:/.所以在这一点上,ZyX的建议setopt rcquotes看起来是最方便的.

ZyX*_*ZyX 21

使用zsh你可能会这样做

setopt rcquotes
Run Code Online (Sandbox Code Playgroud)

.然后ASCII撇号就像这样转义:

echo 'Don''t'
Run Code Online (Sandbox Code Playgroud)

.或者设置你的keymap以便能够输入UTF撇号,它们在任何shell中都没有任何类型的引号(包括无)的问题:

echo 'Don’t'
Run Code Online (Sandbox Code Playgroud)

.第三个适用于zsh和bash:

echo $'Don\'t'
Run Code Online (Sandbox Code Playgroud)

.

第一个和第三个都不能将引用缩小到单个字符,但是对于非冗长的字符串,它们仍然不那么冗长,然后是上面提到的heredocs.使用zsh,您可以通过使用自定义接受行小部件来完成此操作,该小部件将替换'Don't'与之类似的结构'Don'\''t'.需要相当棘手的正则表达式魔法,我只能用perl编写; 并且可能不是最好的主意,因为我不能假装我可以在它们击中前覆盖所有可能的情况.它无论如何都不会触及任何脚本.