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编写; 并且可能不是最好的主意,因为我不能假装我可以在它们击中前覆盖所有可能的情况.它无论如何都不会触及任何脚本.