【发布时间】:2018-11-06 21:08:49
【问题描述】:
我有一个数字列表,大约 200,在我的 ksh 开头,我想验证参数 1 是否是这些数字之一。
我用一个很大的 if 解决了这个问题,但我认为必须存在一个更优雅的解决方案。
例如,类似这样的东西,但在 ksh 中
if $1 in (50, 28, 500, 700, 1, 47) then
do what I want
else
exit
end if
有开始工作的想法吗?
谢谢。
路易斯
【问题讨论】:
我有一个数字列表,大约 200,在我的 ksh 开头,我想验证参数 1 是否是这些数字之一。
我用一个很大的 if 解决了这个问题,但我认为必须存在一个更优雅的解决方案。
例如,类似这样的东西,但在 ksh 中
if $1 in (50, 28, 500, 700, 1, 47) then
do what I want
else
exit
end if
有开始工作的想法吗?
谢谢。
路易斯
【问题讨论】:
我找到了解决办法
case $1 in ( 50 | 28 | 500 | 700 | 1 | 47 )
echo ¨Found!¨
;;
*)
echo ¨NOT found!¨
;;
esac
谢谢!
【讨论】:
如果列表发生变化或很长,case 语句适用于短列表,这可能会很快变得难看。另一个想法是使用关联数组。我在文件rand.txt 中设置了一个包含 100 个随机数的列表,并运行此脚本来检查列表中的数字:
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。
【讨论】: