Bash:if条件 – 检查元素是否存在于数组中

前端之家收集整理的这篇文章主要介绍了Bash:if条件 – 检查元素是否存在于数组中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否有一个有效的方法来检查一个元素是否存在于数组中的Bash?我正在寻找类似于python的东西,你会写成:
arr = ['a','b','c','d']

if 'd' in arr:
    do your thing
else:
    do something

我已经见过使用关联数组bash的解决方案Bash 4,但我想知道是否有另一个解决方案。

请理解,我知道一个平凡的解决方案是在数组中迭代,但我不想要。

你可以做:
if [[ " ${arr[*]} " == *" d "* ]]; then
    echo "arr contains d"
fi

这将给出假阳性,例如,如果你寻找“a b” – 该子字符串在连接字符串,但不是一个数组元素。这个困境将出现在你选择的任何分隔符。

最安全的方法是循环遍历数组,直到找到元素:

array_contains () {
    local seeking=$1; shift
    local in=1
    for element; do
        if [[ $element == $seeking ]]; then
            in=0
            break
        fi
    done
    return $in
}

arr=(a b c "d e" f g)
array_contains "a b" "${arr[@]}" && echo yes || echo no    # no
array_contains "d e" "${arr[@]}" && echo yes || echo no    # yes

这里是一个“更干净的”版本,你只是传递数组名称,而不是其所有的元素

array_contains2 () { 
    local array="$1[@]"
    local seeking=$2
    local in=1
    for element in "${!array}"; do
        if [[ $element == $seeking ]]; then
            in=0
            break
        fi
    done
    return $in
}

array_contains2 arr "a b"  && echo yes || echo no    # no
array_contains2 arr "d e"  && echo yes || echo no    # yes

猜你在找的Bash相关文章