检查整数是否是数组中的元素

Checking if an integer is an element in array

我需要检查值 c 是否存在于整数数组中,我知道如何使用 for 循环和 if 语句来处理此问题:

    for c in {1..100};do
        sequence=(2 4 6 8 10 12 14 16)    
        for value in "${sequence[@]}";do
           if [[ $value -eq $c ]];then  #If c exists in sequence
              flag=1
              break
           fi
    done

完成

但我不想要这个,我试过类似的东西:

[[ ${sequence[*]} =~ $c ]]

但它没有给我想要的结果,我认为它只适用于字符串数组,而不适用于整数。

我该如何处理?

正在将我的评论转换为答案,以便未来的访问者可以轻松找到解决方案。

您可以使用这个grep + printf解决方案:

grep -qFx "$c" <(printf '%s\n' "${sequence[@]}") && echo "found" || echo "nope"

这个方法[[ ${sequence[*]} =~ $c ]]的问题是,如果$c是1,那么它会匹配所有1的实例。试试这个方法,让你的序列成为这样的正则表达式

re=${sequence[*]}
re=${re// /|}
$ echo $re
2|4|6|8|10|12|14|16

测试

c=1
$ [[ $c =~ $re ]] && echo ok || echo fail
fail

c=11
$ [[ $c =~ $re ]] && echo ok || echo fail
fail

c=12
$ [[ $c =~ $re ]] && echo ok || echo fail
ok