Bash shell:如何将bc计算结果分配给变量并打印出来?

Bash shell:如何将bc计算结果分配给变量并打印出来?

我正在尝试复制代码这里在此输入图像描述

不管出于什么原因,它在我的电脑上不起作用。输出,而不是数值,是命令本身。

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'

最后,要打印变量内容,您应该使用echoor 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

相关内容