【问题标题】:is_number function doesn't work for me - unix shellis_number 函数对我不起作用 - unix shell
【发布时间】:2009-11-28 20:39:29
【问题描述】:

当我将 2009 作为 arg 传递给这个 shell 函数时,它返回 0,为什么?

isyear()
{
    case $arg in
        [0-9][0-9][0-9][0-9])   NUM=1   ;;
        *)          NUM=0   ;;
    esac
    echo $arg
}

【问题讨论】:

    标签: shell numbers unix


    【解决方案1】:

    您可能指的是$1,而不是$arg$arg 没有在任何地方定义,$1 是函数的第一个参数。

    【讨论】:

      【解决方案2】:

      您的意思是使用return 代替echo

      返回 [n] 使函数以 n 指定的返回值退出。 如果省略 n,则返回状态为最后一条命令的状态 在函数体中执行。

      【讨论】:

      • 使用return的唯一问题是它只会返回0-255范围内的值。这就是经常使用echo 的原因。但是,在这个问题的情况下,这就足够了。
      • 他可能还是想要return $NUM
      【解决方案3】:

      没关系,它应该是 $1 而不是 $arg 和 echo $NUM。

      【讨论】:

        【解决方案4】:

        两个错别字: 首先,您需要使用 $1 而不是 $arg 来获取函数的第一个参数。 其次,我认为您的意思是回显 $NUM 而不是传入的参数!

        isyear() {
              case $1 in
                      [0-9][0-9][0-9][0-9])   NUM=1   ;;
                      *)                      NUM=0   ;;
              esac
              echo $NUM 
        }
        

        你也可以考虑这样修改它:

        #!/bin/bash
        
        isyear() {
            case $1 in
                  [0-9][0-9][0-9][0-9])   return 1 ;;
                  *)                      return 0 ;;
            esac
        }
        
        isyear cheese
        if [ "$?" -eq "1" ]; then
          echo "Yes, it is a year!"
        else
          echo "Darn!"
        fi
        
        isyear 2009
        if [ "$?" -eq "1" ]; then
          echo "Yes, it is a year!"
        else
          echo "Darn!"
        fi
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多