【发布时间】:2022-01-15 04:26:57
【问题描述】:
我正在努力通过 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
我相信这个问题与第一个循环的输入被读取的行返回有关吗?但是我尝试过的解决方案到目前为止都没有奏效。
我哪里错了?
【问题讨论】:
-
你的代码中没有数组...
-
你能添加你用来运行脚本的命令吗?
-
@kpie,只是
bash scriptname.sh?如果有帮助,我只在终端中调试过这个? -
您的两个变量实际上都不是数组,它们都是中间有换行符的字符串(使它们成为两行文本),但是您循环
inputs的方式需要它是一个实际的数组。请参阅 this question 和 this one on the Unix&Linux SE。你真的想使用数组(通常更干净)还是多行字符串?顺便说一句,$(echo something)几乎总是一个错误——$( )和echo基本上相互抵消。 -
@KyranMcDonnell 其他一些注意事项:如果您不使用实际数组,则应删除
[@](即使用$inputs或${inputs}而不是${inputs[@]})。另外,请注意,使用不带引号的变量会导致任何看起来像文件名通配符的内容扩展为匹配文件名的列表,例如在2 * 3中,*将替换为当前目录中的文件名列表。这是首选实际数组的原因之一。
标签: bash for-loop syntax-error