使用 bc 对数组进行 bash 操作

Adr*_*ins 1 bash bc

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

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

a=(1 2 3)
b=(10 11 12)
c=`echo "$a + $b" | bc`
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*ffy 5

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
Run Code Online (Sandbox Code Playgroud)

请参阅https://ideone.com/YuPhQP上运行的内容,正确发出输出:

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
Run Code Online (Sandbox Code Playgroud)