Bash:在变量列表中进行迭代

时间:2018-11-06 21:48:51

标签: bash loops

我有一个群组列表,其中有别人的名字:

group1="Kyliane Justine Noemie Marion"
group2="Julie Lilou"
group3="Lena Celeste"

以此类推...

我想检查一个组的人的名字出现在根据组号命名的文件中的次数(例如:group1.txt)。

所以我有

for person in $group1
do
number=$(grep -oi "$person" /path/group1.txt | wc -l)
echo $person "wrote" $number "times."
done

效果很好。

但是,我想要的是检查每个组文件中的每个组成员,不仅检查/path/group1.txt中的$ group1,还检查/path/group2.txt中的$ group2,依此类推。我知道我可以复制粘贴我的代码,只需按group2,group3等更改group1。但是我敢肯定有一种更快的方法,尤其是当我有12个小组时!我是bash的初学者,我不知道该怎么做。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用数组而不是单独的变量。

groups=("Kyliane Justine Noemie Marion" "Julie Lilou" "Lena Celeste")
i=1
for group in "${groups[@]}"
do 
    for person in $group
    do
        number=$(grep -oi "$person" /path/group$i.txt 2>/dev/null | wc -l)
        echo $person "wrote" $number "times."
    done
    i=$((i+1))
done

作为一般规则,只要发现使用顺序名称创建变量,就可能应该使用数组或类似的数据结构。这适用于大多数编程语言。