gpt4 book ai didi

Shell 脚本 - 处理数组中的 float 数学运算,而不先将值放入 var 中?

转载 作者:行者123 更新时间:2023-12-04 18:40:26 25 4
gpt4 key购买 nike

我正在编写一个小脚本,它将获取我的一个工具的输出,并将读取文件中的值。

我使用数组作为存储,所以一旦数组具有文件中的值,我就会处理它们,计算各种指标。

现在我意识到做这样的事情是不可能的:

thearray=(1.1 2.2 3.3 4.4 5.5)


tempval=${thearray[0]} + ${thearray[1]}

我想获取数组的第一个元素(位置 0)和第二个元素(位置 1)并将它们相加,并将结果保存在 tempval 中。整个数组包含 float ,所以我假设 shell 知道数组中的数据类型,并且应该允许我求和。

相反,输出是字段 0 的值、“+”和字段 1 的值

echo $tempval
1.1+2.2

我假设这个问题对于包含数字的变量是通用的,并且 shell 将它们视为字符串,进行连接而不是求和。

如果我获取 ${the array[0]} 和 ${the array[1]} 的输出,并首先将它们放入变量中,然后我可以使用 $(( )) 语法对它们求和

var1=${the array[0]}
var2=${the array[1]}

tempvar=$((var1+var2))

尽管这似乎适用于整数,而不适用于 float 。

有没有办法避免这种情况,直接得到算术和,而不必在求和之前创建变量来存储数组值?我需要对超过 14 个元素求和,并且必须创建 14 个不同的变量来保存这些值似乎是一种很大的浪费,例如,当我计算平均值时。

我试过了

tempval=$((${thearray[0]} + ${thearray[1]}))

但它返回语法错误:无效的算术运算符。在其他语言中,我会转换为 float,但在这里我完全迷路了。

我们非常欢迎任何建议。谢谢

最佳答案

$ thearray=(1.1 2.2 3.3 4.4 5.5)
$ sum=$( IFS="+"; bc <<< "${thearray[*]}" )
$ echo $sum
16.5

"${array[*]}" 形式返回一个字符串,每个数组元素由 $IFS 的第一个字符连接。所以我们将字符串 1.1+2.2+3.3+4.4+5.5 传递给 bc

关于Shell 脚本 - 处理数组中的 float 数学运算,而不先将值放入 var 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com