KSH Проверка наличия номера в списке

У меня есть список чисел, около 200, и в начале моего ksh я хочу проверить, является ли параметр 1 одним из этих чисел.

Я решил это с большим if, но я думаю, что должно существовать более элегантное решение.

В примере как то так, но в кш

if $1 in (50, 28, 500, 700, 1, 47) then
   do what I want
else
   exit
end if

Есть идеи начать работать?

Благодарю.

Луис

2 ответа

Оператор case работает для коротких списков, если список изменяется или является длинным, что может привести к неприятным последствиям в спешке. Другая идея заключается в использовании ассоциативного массива. Я настроил список из 100 случайных чисел в файле rand.txt и запустил этот скрипт для проверки номеров в списке:

typeset -A numList
for num in $( < rand.txt )
do
    numList[$num]=$num
done

if [[ -n ${numList[$1]} ]]
then
    echo "do what I want"
else
    echo 'not interesting'
fi

Если вы не хотите отдельный файл с номерами, это также работает:

typeset -A numList
(
cat <<EOF
72
107
104
82
20
21
EOF
) | while read num
do
    numList[$num]=$num
done
if [[ -n ${numList[$1]} ]]
then
    echo "do what I want"
else
    echo 'not interesting'
fi

Они также работают на Bash.

Я нашел решение

case $1 in ( 50 | 28 | 500 | 700 | 1 | 47 ) 
  echo ¨Found!¨
;;
*)
   echo ¨NOT found!¨
;;
esac

Спасибо!

Другие вопросы по тегам