Backticks vs Bash中的大括号

时间:2014-03-28 09:55:28

标签: bash command-substitution

当我回答this question时,我打算使用${}符号,因为我在这里已经多次看到它比反对更好。< / p>

然而,当我尝试

joulesFinal=${echo $joules2 \* $cpu | bc}

我收到了消息

-bash: ${echo $joules * $cpu | bc}: bad substitution

但是

joulesFinal=`echo $joules2 \* $cpu | bc`

工作正常。那么我需要做出哪些其他改变呢?

2 个答案:

答案 0 :(得分:60)

当你使用``(花括号)时,$()被称为命令替换,相当于${}(括号)。

所以这些是平等的并且意味着&#34;解释放在&#34;:

内的命令
joulesFinal=`echo $joules2 \* $cpu | bc`
joulesFinal=$(echo $joules2 \* $cpu | bc)
             ^                          ^
       ( instead of {             ) instead of }

虽然${}表达式用于变量替换。


来自man bash

  

命令替换允许输出命令来替换   命令名称。有两种形式:

          $(command)
   or
          `command`

此外,``更难以处理,例如,您无法嵌套它们。请参阅下面的评论以及Why is $(...) preferred over ... (backticks)?

答案 1 :(得分:18)

在特定情况下,他们的行为略有不同:

$ echo "`echo \"test\" `"
test
$ echo "$(echo \"test\" )"
"test"

所以反引号会默默删除双引号。