Mar*_*era 4 bash pipe command-substitution
有人可以解释为什么A并且B表现不同吗?
A=`echo hello how are you | wc -w`
Run Code Online (Sandbox Code Playgroud)
和
CMD="echo hello how are you | wc -w"
B=`$CMD`
Run Code Online (Sandbox Code Playgroud)
他们给出不同的结果:
$echo $A
4
$echo $B
hello how are you | wc -w
Run Code Online (Sandbox Code Playgroud)
我想要的是变量中的命令,我可以在脚本的多个点执行该命令并获取不同的值进行比较。它曾经工作正常,但如果命令有管道,它就不起作用。
``(即反引号)或 $()在 bash 中称为命令替换。""- 例如用于保存字符的字面值,即数据。在第一个示例中,执行命令echo hello how are you | wc -w并将其值4分配给A,因此您得到4。
B在您的第二个示例中,由于后期分词`$CMD`,它|不会“评估”字符串到变量的分配(请参阅此处以获取更多信息),并且您会得到.hello how are you | wc -w
eval您可以使用以下命令完成您需要的操作:
CMD="echo hello how are you | wc -w"
echo `eval $CMD` # or just eval "$CMD"
# Output is 4
Run Code Online (Sandbox Code Playgroud)