我正在尝试复制代码这里
不管出于什么原因,它在我的电脑上不起作用。输出,而不是数值,是命令本身。
apple$ x='echo "var=500;var%=7;var"|bc'
apple$ $x
"var=500;var%=7;var"|bc
我想知道这是为什么。我做错了什么?
答案1
源使用反引号 ( `
) 来指示命令替换。执行反引号内指定的命令,并将结果放在其位置。在本例中,这是一个简单的变量赋值,因此命令的结果被赋值给变量。
-x
通过bash 选项很容易看出这一点:
$ x=`echo "var=500;var%=7;var"|bc`
++ echo 'var=500;var%=7;var'
++ bc
+ x=3
您使用的是单引号,而不是反引号字符。单引号指示 shell 保留文字值而不对其内容应用任何类型的处理。结果,命令按原样分配给变量。这是相应的-x
输出:
$ x='echo "var=500;var%=7;var"|bc'
+ x='echo "var=500;var%=7;var"|bc'
最后,要打印变量内容,您应该使用echo
or printf
。当“x”的值为3时,运行$x
会给出-bash: 3: command not found
错误消息。运行$x
在您的情况下起作用只是因为该echo
命令是变量内容的一部分。
答案2
正如 Haxiel 所指出的,您很可能使用的是单引号,而不是反引号字符。但比使用反引号 ( `
) 更好,我建议您使用$()
。反引号已弃用,并且$()
与 POSIX 兼容。
在你的例子中你可以这样做:
x=$(echo "var=500;var%=7;var" | bc)
echo "$x"
或者在单行中:
echo "var=500;var%=7;var" | bc