检查整数是否是数组中的元素
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
我需要检查值 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