在 bash 中使用 bc 表示循环数组不计算第一个输入?



我很难通过for循环传递一个多行浮点数数组,让它运行计算,然后从输出中定义一个新变量。

这是我的Bash:的简化版本

inputs=$(echo "12.12
34.34")
New_array=$( for var in "${inputs[@]}"; do
echo "${var}*2"| bc -l;
done )

我希望echo "$New_array"的结果是:

$ echo "$New_array"
24.24
68.68

但我明白了吗?

$ echo "$New_array"
12.12
68.68

或者在我进行故障排除时(例如,删除$New_array变量(:

(standard_in) 1: syntax error

认为问题与将行返回读取为第一个循环的输入有关?但到目前为止,我尝试的解决方案还没有奏效。

我哪里错了?

这可能是您想要做的:

#!/bin/bash
inputs=(12.12 34.34)
for var in "${inputs[@]}"; do
New_array+=("$(bc -l <<< "$var * 2")")
done
printf '%sn' "${New_array[@]}"

注意,inputs=(12.12 34.34)创建具有元素12.1234.34的名为inputs的阵列。New_array+=(...)将一个元素(这里是命令bc -l <<< "$var * 2"的输出(附加到数组New_array。或者,这可以使用printf的隐式循环和bash:的mapfile内建来同时完成

mapfile -t New_array < <(printf '%s * 2n' "${inputs[@]}" | bc -l)

如果保证数组的元素不包含空白和glob字符(这里可能是这种情况(,那么这可能是一种替代方法:

New_array=($(printf '%s * 2n' "${inputs[@]}" | bc -l))

相关内容

  • 没有找到相关文章