我想知道是否有办法在bash中轻松完成这个表达式:
(2 * a * sqrt(3))/ 2,其中a是我循环的一些变量。有没有办法将这一切都压缩成一个表达式?到目前为止,我做到了这一点:
for a in 1.1 2.2 3.3
do
sqrt3=$(echo "sqrt (3)" | bc -l)
然后我尝试了很多东西:
my_val = $(echo "(2*${sqrt3}*${a})/2" | bc)
两个表达式:
first = $((2 * sqrt3 * ${a}))
second = $first/2
但是,这些都不起作用。它没有给出错误,但是当我尝试打印表达式时它也不会打印任何内容。如果无法将其压缩成一个表达式,还有办法吗?谢谢!
编辑:现在试试这个 -
for a in 1.1 2.2 3.3
do
my_val = $(echo bc <<< "scale = 3; 2 * $a * sqrt(3) / 2")
主要问题是它不是作为变量保存的。我也尝试了这个:
my_val = $(echo "scale = 3; 2 * $a * sqrt(3) / 2" | bc)
答案 0 :(得分:2)
Shell脚本通过查看单词后面的空格来区分变量赋值与命令调用。
变量赋值中的=
符号由空格包围。在shell中,这不是赋值,而是命令调用。
此:
my_val = $(echo "(2*${sqrt3}*${a})/2" | bc)
应改为:
my_val=$(echo "(2*${sqrt3}*${a})/2" | bc)
对于=
周围的空格,shell认为my_val
是一个命令,=
是第一个参数,计算结果是第二个参数。