如何将 bc 的结果传递给变量

sha*_*lin 16 bash scripts environment-variables bc

我正在编写一个脚本,我想将结果传递给bc一个变量。我已经声明了 2 个变量 ( var1and var2) 并给了它们值。在我的脚本中,我想将结果传递bc到另一个变量 say 中,var3以便我可以var3进行其他计算。到目前为止,我已经能够将结果写入一个不是我正在寻找的文件中,并且我已经能够在终端中回显结果,但我现在只想将结果传递给一个变量,以便我可以使用该变量。

echo "scale=2;$var1/var2" | bc
Run Code Online (Sandbox Code Playgroud)

gni*_*urf 26

如果您使用的是 bash,则最好使用 here 字符串而不是管道,如下所示:

bc <<< "scale=2;$var1/$var2"
Run Code Online (Sandbox Code Playgroud)

这将为您节省一个子shell。

然后,要存储命令的输出,请使用命令替换:

answer=$(bc <<< "scale=2;$var1/$var2")
Run Code Online (Sandbox Code Playgroud)

编辑。

如果你想要比 更酷的东西bc,这里是 dc(反向抛光计算器):

answer=$(dc <<< "2k $var1 $var2/p")
Run Code Online (Sandbox Code Playgroud)

  • 每次使用管道`|` 时,管道右侧的命令都会在一个子shell 中执行,并且需要资源来打开一个新的子shell(就像打开一个新的bash 实例来执行该命令一样)。如果你能避免它,就避免它。在这里,将 `echo` 传递给 `bc` 将在子 shell 中运行命令 `bc`,并且在某种意义上是延迟的(没有冒犯),因为 bash 具有美妙的 here-string 构造 `&lt;&lt;&lt;` 来避免诸如此类的蠢事。 (2认同)

Gil*_*il' 9

命令替换命令的输出存储到变量中。

var3=$(echo "scale=2;$var1/$var2" | bc)
Run Code Online (Sandbox Code Playgroud)