Проверка, является ли целое число элементом в массиве - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно проверить, существует ли значение 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

done

Но я не хочу этого, я пробовал что-то похожее на это:

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

Но это не дало мне желаемых результатов, я думаю, что это работает только со строковыми массивами, а не целыми числами.

Как я могу подойти к этому?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Проблема с этим методом [[ ${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
0 голосов
/ 01 апреля 2020

Преобразование моего комментария в ответ, чтобы решение было легко найти для будущих посетителей.

Вы можете использовать это grep + printf решение:

grep -qFx "$c" <(printf '%s\n' "${sequence[@]}") && echo "found" || echo "nope"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...