如何根据bash中的条件缩短数组

时间:2015-06-30 09:50:12

标签: arrays bash

我是一名新的bash学员。我在bash中有一个数组,从标准输入中获取输入。我必须在一些逻辑的基础上缩短阵列。说,我在数组中有以下元素:

Namibia
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway

现在,我必须缩短数组,只有accepted元素可以保留在数组中。如果它不包含字母accepted(区分大小写)并且包含字母a(不区分大小写)i 。对于上面的列表,答案是:

Niger

如何在bash中实现它?

请注意,我可以在没有如下条件的情况下打印阵列。但我希望有条件。

countries=()
while read -r country; do
    countries+=( "$country" )
done
# here i have to do something to shrink/shorten the array on the basis of some logic. In this case, elements of countries should have at least one character 'a' and should not contain 'i' / 'I'.
echo "${countries[@]}"

1 个答案:

答案 0 :(得分:1)

如果要在构建阵列时过滤列表,则应执行以下操作:

countries=()
while read -r country; do
    country=$(echo "$country" | grep -vi a | grep i)
    if [ -n "$country" ]; then
        countries+=( "$country" )
    fi
done
printf '%s\n' "${countries[@]}"