KSH Проверка наличия номера в списке - PullRequest
0 голосов
/ 07 ноября 2018

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

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

Например, как-то так, но в ksh

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

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

Спасибо.

1012 * Луис *

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Оператор 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.

0 голосов
/ 07 ноября 2018

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

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

Спасибо! * * 1004

...