【问题标题】:KSH Verifying if a number exist in a listKSH 验证列表中是否存在数字
【发布时间】: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

有开始工作的想法吗?

谢谢。

路易斯

【问题讨论】:

    标签: arrays ksh


    【解决方案1】:

    我找到了解决办法

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

    谢谢!

    【讨论】:

      【解决方案2】:

      如果列表发生变化或很长,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。

      【讨论】:

      • 我喜欢您的第一个带有文件的解决方案,但没有加载列表中的所有数字并在找到时停止。 #!/bin/bash for num in $(
      猜你喜欢
      • 1970-01-01
      • 2014-12-11
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多