Bash 如何将除法存储到变量

Bash how to store a division to a variable

我正在尝试计算以下公式并将值存储到变量中。

伪代码应该如下所示:

a=10
b=5
c=$(((($a-$b)/52)) | bc -l)
echo $c

结果为空。我无法弄清楚使用 bc 的语法。请帮助我使用 bc 而不是 awk 或其他方法。

你可以使用这个:

a=10
b=5
c=$(bc -l <<< "($a-$b)/52")
echo "$c"

.09615384615384615384

或者通过设置比例 3:

c=$(bc -l <<< "scale=3; ($a-$b)/52")
echo "$c"

.096

您需要注意 件事。第一个是 bc 对表达式使用标准输入,因此您实际上需要 pipe 您的表达式,或使用 <<< 重定向运算符,其中之一:

c=$(echo "($a - $b) / 52" | bc)
c=$(bc <<< "($a - $b) / 52")

<<< 方法特定于 bashksh可能 其他方法,但我不是很熟悉他们)。另一种方法可以在大多数shell中使用。

其次,在为此使用大数字时要小心,因为 bc 有将它们拆分成多行的烦人习惯:

pax$ x=999999999999999999999999999999999999999999999999999999999999999999999

pax$ echo "$x / 7" | bc
14285714285714285714285714285714285714285714285714285714285714285714\
2

为了避免这种情况,您需要更改行长:

pax$ echo "$x / 7" | BC_LINE_LENGTH=0 bc
142857142857142857142857142857142857142857142857142857142857142857142