当我回答this question时,我打算使用${}
符号,因为我在这里已经多次看到它比反对更好。< / p>
然而,当我尝试
时joulesFinal=${echo $joules2 \* $cpu | bc}
我收到了消息
-bash: ${echo $joules * $cpu | bc}: bad substitution
但是
joulesFinal=`echo $joules2 \* $cpu | bc`
工作正常。那么我需要做出哪些其他改变呢?
答案 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"
所以反引号会默默删除双引号。