【发布时间】:2022-11-04 17:40:06
【问题描述】:
有人可以解释为什么A 和B 的行为不同吗?
A=`echo hello how are you | wc -w`
和
CMD="echo hello how are you | wc -w"
B=`$CMD`
他们给出不同的结果:
$echo $A
4
$echo $B
hello how are you | wc -w
我想要的是一个变量中的命令,我可以在脚本的几个点执行它并获取不同的值进行比较。它曾经工作正常,但如果命令有管道,它就不起作用。
【问题讨论】:
-
在变量中存储 shell 语法(如管道、引号等)不起作用。变量用于数据,而不是可执行代码。如果要存储可执行代码,请使用函数,这就是它们的用途。请参阅BashFAQ #50: "I'm trying to put a command in a variable, but the complex cases always fail!" 和许多关于此的先前问题(但避免所有涉及
eval的建议——这是一个巨大的错误磁铁)。
标签: bash pipe command-substitution