我很难通过一个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我认为这个问题与作为第一个循环的输入读取的行返回有关?但到目前为止,我尝试过的解决方案还没有奏效。
我哪里出问题了?
发布于 2022-01-15 11:47:52
这可能就是你想要做的事情:
#!/bin/bash
inputs=(12.12 34.34)
for var in "${inputs[@]}"; do
New_array+=("$(bc -l <<< "$var * 2")")
done
printf '%s\n' "${New_array[@]}"注意,inputs=(12.12 34.34)创建了一个名为inputs的数组,该数组具有元素12.12和34.34。New_array+=(...)将一个元素(这里是命令bc -l <<< "$var * 2"的输出)附加到数组New_array中。或者,可以立即使用printf的隐式循环和mapfile内置的bash来完成这一任务。
mapfile -t New_array < <(printf '%s * 2\n' "${inputs[@]}" | bc -l)如果保证数组的元素不包含空格和glob字符(这里可能就是这种情况),那么这可能是另一种方法:
New_array=($(printf '%s * 2\n' "${inputs[@]}" | bc -l))https://stackoverflow.com/questions/70718868
复制相似问题