通过阅读bc的手册页,看来bc可以接受简单的变量,但也可以接受数组作为输入。
但是,如果我尝试添加两个数组,我只会得到一个元素作为输出
a=(1 2 3)
b=(10 11 12)
c=`echo "$a + $b" | bc`
那么c仅包含11。是否有办法让bc对数组中的所有元素进行运算以产生(11 13 15)作为输出?还是我需要做一个循环?
答案 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