bash 使用 bc 对数组进行操作

bash operations on arrays using bc

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

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

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

那么c只包含11,有没有办法让bc对数组中的所有元素进行运算,输出(11 13 15)呢?或者我需要做一个循环吗?

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