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
阅读 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