将括号符号回显到终端

将括号符号回显到终端

该命令按预期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

相关内容