![在 bash 脚本中将浮点数添加到循环索引](https://linux22.com/image/204142/%E5%9C%A8%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%B0%86%E6%B5%AE%E7%82%B9%E6%95%B0%E6%B7%BB%E5%8A%A0%E5%88%B0%E5%BE%AA%E7%8E%AF%E7%B4%A2%E5%BC%95.png)
我正在尝试将浮点数添加到循环点。我的循环是非顺序的。
j=9.46
for i in 8.0 7.5 7.0 6.5 ;do
$i = $i + $j |bc
echo '$i'
我也尝试过
ans=$(( x + y ))
k=$[$i+$j]
我必须将常量添加到循环索引并在脚本后面的命令中使用它。我可以使用 |bc 回显输出,但稍后不能在脚本中将其用作变量。
答案1
shell bash
(与 ksh93、zsh 或 yash 相反)无法在算术计算中执行浮点运算,但您始终可以调用执行浮点运算的工具。bc
适用于任意精度计算,但这里awk
可能是一个更好的工具,因为它适合处理数组、算术和循环:
awk -v increment=9.46 -- '
BEGIN {
for (i = 1; i < ARGC; i++) print ARGV[i] + increment
}' 8.0 7.5 7.0 6.5
会输出:
17.46
16.96
16.46
15.96
请注意,awk
默认情况下输出 6 位精度的浮点数。添加-o OFMT=%.10g
例如 10 位精度(内部计算通常使用 Cdouble
类型数字,通常具有 64 位精度)。
答案2
在循环中尝试类似的操作:
i1=$(echo " $i + $j" |bc)
echo "$i1"
首先,两边不应该有空格=
第二个单引号将阻止 shell 解释变量的内容