Bash 脚本中使用数组进行循环

Bash 脚本中使用数组进行循环

我想使用for数组循环。我为此使用了以下命令:

#! /bin/bash
rm -f /orch/list

arrayVM=($(cat /orch/servers | grep $1 | awk '{print $1}'))
for i in $arrayVM
do
        echo ${arrayVM[$i]}>>list
done

但当我检查list文件时,只看到数组的第一个元素arrayVM。我的命令有什么问题?

答案1

主要错误是将for i in $arrayVM设置i为中的第一个元素arrayVM,因为没有索引。我很惊讶这不会在命令中给出错误echo,除非第一个数组元素是数字。

您需要的是迭代形式for:-

for (( i=0; i<${#arrayVM[*]}; ++i ))
do
    echo ${arrayVM[$i]}>>list
done

然而,这没有必要冗长:更简单的是:-

for e in "${arrayVM[@]}"
do
    echo $e>>list
done

这将e依次分配给每个元素,而不枚举它们。

根据 Fedorqui 的回答,如果arrayVM其他地方不需要,那么有一种更简单的方法来创建列表文件:-

cat /orch/servers | grep $1 | awk '{print $1}' >/orch/list

cat或者,由于不必要:-

grep $1 </orch/servers | awk '{print $1}' >/orch/list

答案2

如果你不需要将数据存储在数组中,但你还想将每条记录用于其他用途,则可以使用流程替代

while IFS= read -r value _;
do
        echo "$value" >> list
done < <(grep "$1" /orch/servers)

我们read -r value _将第一个字段存储在其中$value,其余字段存储在丢弃变量中$_

相关内容