首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash循环数组中使用bc不计算第一个输入?

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

Stack Overflow用户
提问于 2022-01-15 04:26:57
回答 1查看 81关注 0票数 0

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

下面是我的Bash的简化版本:

代码语言:javascript
复制
inputs=$(echo "12.12
34.34")

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

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

代码语言:javascript
复制
$ echo "$New_array"
24.24
68.68

但我明白了?

代码语言:javascript
复制
$ echo "$New_array"
12.12
68.68

或者在排除故障时(例如删除$New_array变量):

代码语言:javascript
复制
(standard_in) 1: syntax error

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

我哪里出问题了?

EN

回答 1

Stack Overflow用户

发布于 2022-01-15 11:47:52

这可能就是你想要做的事情:

代码语言:javascript
复制
#!/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来完成这一任务。

代码语言:javascript
复制
mapfile -t New_array < <(printf '%s * 2\n' "${inputs[@]}" | bc -l)

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

代码语言:javascript
复制
New_array=($(printf '%s * 2\n' "${inputs[@]}" | bc -l))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70718868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档