linux判断数组键存在,检查Bash数组中是否存在元素

你可以: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

这里有一个“cleaner”版本,您只需传递数组名,而不是它的所有元素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

对于关联数组,有一种非常简洁的方法来测试数组是否包含给定的键:运算符-v$ declare -A arr=( [foo]=bar [baz]=qux )

$ [[ -v arr[foo] ]] && echo yes || echo no

yes

$ [[ -v arr[bar] ]] && echo yes || echo no

no

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值