roj*_*oke 45 bash command-substitution
当我去回答这个问题时,我打算使用这个${}符号,因为我在这里已经看过很多次,所以最好用反引号.
但是,当我尝试
joulesFinal=${echo $joules2 \* $cpu | bc}
Run Code Online (Sandbox Code Playgroud)
我收到了消息
-bash: ${echo $joules * $cpu | bc}: bad substitution
Run Code Online (Sandbox Code Playgroud)
但
joulesFinal=`echo $joules2 \* $cpu | bc`
Run Code Online (Sandbox Code Playgroud)
工作良好.那么我需要做出哪些其他改变呢?
fed*_*qui 72
当你使用(花括号)时,它`` 被称为命令替换并且等同于$()(${}括号).
所以这些是平等的,意思是"解释放在里面的命令":
joulesFinal=`echo $joules2 \* $cpu | bc`
joulesFinal=$(echo $joules2 \* $cpu | bc)
^ ^
( instead of { ) instead of }
Run Code Online (Sandbox Code Playgroud)
虽然${}表达式被用于变量替换.
来自man bash:
命令替换允许输出命令来替换命令名称.有两种形式:
Run Code Online (Sandbox Code Playgroud)$(command) or `command`
此外,``更难以处理,例如,你不能嵌套它们.请参阅下面的评论以及为什么$(...)首选...(反引号)?.
Gun*_*ick 23
在特定情况下,它们的行为略有不同:
$ echo "`echo \"test\" `"
test
$ echo "$(echo \"test\" )"
"test"
Run Code Online (Sandbox Code Playgroud)
所以反引号默默地删除双引号.