如果我使用单引号,带有撇号的单词(“不要”)很难转义:
'Don'"'"'t do that'
如果我使用双引号、美元符号和感叹号会出错:
"It cost like \$1000\!"
我可以使用另一种引用方式吗?
编辑:我还应该补充一点,我想将此字符串作为命令行参数直接传递,而不是将其存储在变量中。为此,我尝试使用 DigitalRoss 的解决方案,
$ echo "$(cat << \EOF
Don't $worry be "happy".
EOF)"
但是得到
dquote cmdsubst>
点击后输入:/。所以此时 ZyX 的建议 setopt rcquotes
看起来是最方便的。
最佳答案
你可以用 zsh 做
setopt rcquotes
.然后像这样转义 ASCII 撇号:
echo 'Don''t'
.或者将您的键盘映射设置为能够输入 UTF 撇号,它们在任何 shell 中对任何类型的引号(包括无引号)都没有问题:
echo 'Don’t'
.第三个适用于 zsh 和 bash:
echo $'Don\'t'
.
first 和 third 都不能将引号缩小到单个字符,但对于非冗长的字符串,它们仍然比上面建议的 heredoc 更简洁。借助 zsh,您可以通过使用自定义接受行小部件来实现这一点,该小部件会将 'Don't'
等结构替换为 'Don'\''t'
。需要我只能用 perl 编写的相当棘手的正则表达式魔术;这可能不是最好的主意,因为我不能假装我可以在它们发生之前涵盖所有可能的情况。它在任何情况下都不会触及任何脚本。
关于bash - zsh 或 bash 是否有方便英文文本的引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884902/