我想做类似的事情bzr commit -m "It works!"
。我可以通过执行来转义感叹号bzr commit -m "It works\!"
。但是,我的提交消息包含反斜杠。如何转义感叹号,同时仍然忽略反斜杠?
答案1
由于您不依赖 bash 来扩展提交消息中的变量,因此您可以改用单引号。bash 不会扩展单引号中的字符串。
bzr commit -m 'This does work!'
答案2
如果您想要双引号和感叹号,这里有另一种方法:
echo "It's broken"'!'
即使!
不在行尾,这也有效。
例如:
echo "hello there"'!'" and goodbye"
奖励:可以使用类似的技术来逃脱任何Sh 或 Bash 中的文本(借助 sed):参见这个答案。此外,如果您已经bash-completion
安装,您可能已经功能quote()
已经可用。
答案3
答案4
我刚刚发现了另一种方法,它至少可以处理echo
要用感叹号标点的字符串(句子)。它或多或少绕过了 Bash histexpand,并且只需要花费一点时间来编写代码。
感叹号的十六进制数,如
http://www.ascii-code.com/,是 21,因此如果你\x21
在字符串末尾加上 ,它echo -e $foo
会产生$foo
自己的扩展回显 [即],当你再次获得以结尾的字符串foo=$(echo -e "$foo")
时,你得到的echo $foo
是字符串。并且也无需切换 histexpand。!
在 Bash 4+ 中肯定可以工作。早期版本,ymmv。