我很难通过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.12
和34.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))