使用bc对数组进行bash操作

时间:2019-02-25 13:28:28

标签: bash bc

通过阅读bc的手册页,看来bc可以接受简单的变量,但也可以接受数组作为输入。

但是,如果我尝试添加两个数组,我只会得到一个元素作为输出

a=(1 2 3)
b=(10 11 12)
c=`echo "$a + $b" | bc`

那么c仅包含11。是否有办法让bc对数组中的所有元素进行运算以产生(11 13 15)作为输出?还是我需要做一个循环?

1 个答案:

答案 0 :(得分:4)

bc不能本地访问bash数组,但是您可以从两个数组中生成一个加法运算流,并将其结果读回到第三个数组中(因此只需要调用一次bc即可,而不是为每个循环条目运行bc的单独副本):

a=(1 2 3)
b=(10 11 12)

readarray -t c < <(for idx in "${!a[@]}"; do
  echo "${a[$idx]} + ${b[$idx]}"
done | bc)
declare -p c              # print output as an array definition
printf '%s\n' "${c[@]}"   # print output one entry per line

看到此代码在https://ideone.com/YuPhQP运行,并正确地作为输出发出:

declare -a c=([0]="11" [1]="13" [2]="15")
11
13
15