该命令按预期echo Hello World
打印Hello World
,但echo Hello (World)
生成错误syntax error near unexpected token `('
。
我知道诸如()
, {}
,之类的括号[]
是标记并且具有特殊含义,那么如何在bash
脚本中“转义”这些呢?
答案1
(
除了简单的括号和之外,它们实际上并不是词法分析器意义上的标记)
。
{
特别是}
根本不需要任何引用:
$ echo {Hello World}
{Hello World}
(除非您将{
or}
作为命令的第一个单词,它们被解释为关键字;或者如果您{a,b}
在单个单词中使用逗号或双点,则它是大括号扩展。)
[]
也仅作为全局字符是特殊的,如果没有匹配的文件名,则默认行为是按原样保留该单词。
但无论如何,为了逃避它们,您通常会用单引号或双引号引用它们:
echo "(foo bar)"
echo '(foo bar)'
或者只是一一转义相关字符,尽管这有点累:
echo \(foo\ bar\)
或者任何你喜欢的组合:
echo \(fo"o bar"')'
看:
答案2
具体到问题:真正的“转义”是:
echo hello \(world\)
带有一个 shell 参数的 echo 的“干净”调用是:
echo "hello (world)"
...你就可以免费获得“逃脱”。
echo hello "("world")"
是相当无法定义的。等等。 “你可以玩回声”。
"hello $world"
和
'hello $world'
不一样!先用world=mars
。