Shell Scripting:将循环输出存储在单独的数组中

时间:2017-08-24 06:15:55

标签: arrays bash shell

我得到了以下脚本,其中我从网络中的主机接收传感器数据。我收到的数据应存储在一个名为output的单独数组中,这样我就可以在循环结束后继续处理数组输出。每当接收到新的传感器数据时,当前循环如果覆盖存储在输出中的数据。

declare -a sensorData=(
    "1.3.6" #Data1
    "1.3.6" #Data2
)

declare -a output=()

for i in "${sensor[@]}"
do
    output=$(snmpget -v "snmpversion" -c  "ipaddress" "$i")
    echo $output
done

因此,我从snmpget命令获得的值应存储在数组output中。

1 个答案:

答案 0 :(得分:0)

这个想法是正确的,但您只需要将命令替换$(..)输出包含在您定义的数组中。 +=运算符允许您在每次迭代中将snmpget输出附加到数组。

output+=( $(snmpget -v "snmpversion" -c  "ipaddress" "$i") )

然后,您可以遍历数组以获取存储的值。

for val in "${output[@]}"; do
    printf "%s\n" "$val"
done

如果您担心IFS以及shell如何将每个命令输出行拆分到数组中,您可以将其保留为mapfile命令,可在最新版本的{{1}中使用(我猜是v4.0或更多)

bash

然后像以前一样在输出数组上运行循环。但是,当您想追加到数组时,这不适用,只需运行一次命令即可。