【发布时间】:2015-10-21 11:21:08
【问题描述】:
假设我们有一个包含整数的 BASH 数组:
declare -a arr=( 1 2 3 )
我想对每个元素进行算术运算,例如添加 1. 是否有 for 循环的替代方法:
for (( i=0 ; i<=${#arr[@]}-1 ; i++ )) ; do
arr[$i]=$(( ${arr[$i]} + 1 ))
done
我尝试了几个选项:
arr=$(( ${arr[@]} + 1 ))
失败,而
arr=$(( $arr + 1 ))
结果
echo ${arr[@]}
2 2 3
因此只有第一个(第零个)元素被更改。
我阅读了有关 awk 解决方案的信息,但想知道 BASH 算法是否支持对每个数组元素进行此类批处理操作。
【问题讨论】:
-
我认为没有其他选择。附带说明一下,我使用的任何编程语言都不能原生地做到这一点。另外,您可以将
arr[$i]=$(( ${arr[$i]} + 1 ))简化为arr[$i]++ -
我不知道您的首选语言,但例如FORTRAN 确实支持
arr(:) = arr(:) + 1或arr3(:) = arr1(:) * arr2(:),所以我希望 BASH 有能力。抱歉,我无法重现arr[$i]++的东西。需要解释一下吗? -
忘记了括号。正确的语法是
(( $arr[$i]++ )) -
如果有函数,shell 只会在后台循环。因此,如果它困扰您,只需编写自己的函数即可。
-
@Plutox 抱歉,仍然无法重现,您能否明确地从头到尾编写 for 循环?提前致谢。
标签: arrays bash arithmetic-expressions