加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 09:11:28 所属栏目:安全 来源:网络整理
导读:我想知道是否有一个有效的方法来检查一个元素是否存在于数组中的Bash?我正在寻找类似于python的东西,你会写成: arr = ['a','b','c','d']if 'd' in arr: do your thingelse: do something 我已经见过使用关联数组bash的解决方案Bash 4,但我想知道是否有另
我想知道是否有一个有效的方法来检查一个元素是否存在于数组中的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读