функция is_number у меня не работает - оболочка unix - PullRequest
0 голосов
/ 28 ноября 2009

Когда я передаю 2009 как аргумент этой функции оболочки, она возвращает 0, почему?

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

Ответы [ 4 ]

2 голосов
/ 28 ноября 2009

Вы, вероятно, имеете в виду $1 вместо $arg. $arg нигде не определено, а $1 является первым аргументом функции.

1 голос
/ 28 ноября 2009

Вы хотите использовать return вместо echo?

  return [n]
         Causes  a function to exit with the return value specified by n.
         If n is omitted, the return status is that of the  last  command
         executed  in the function body.
0 голосов
/ 28 ноября 2009

Два опечатки: Прежде всего вам нужно использовать $ 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
0 голосов
/ 28 ноября 2009

Неважно, это должен быть $ 1, а не $ arg и echo $ NUM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...