从阅读 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)作为输出?或者我需要做一个循环吗?
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)
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |