POSIX getopts отказывается подтверждать числовое значение $ OPTARG - PullRequest
0 голосов
/ 06 января 2012

Я использую getopts для разбора опций для пользовательского скрипта, работающего под bash.

Код для достижения этого очень стандартный:

while getopts :s: opt; do
  case $opt in
    s)
      echo "\$OPTARG is $OPTARG"
      ;;
  esac
done

Однако $ OPTARG пуст дляпараметр, который я указал с числовым аргументом:

myscript.sh -s 012345 # => [ $OPTARG = "" ]

Проблема может быть решена заключением аргумента в кавычки.Хотя это уродливо для числового аргумента.

myscript.sh -s "012345" #  => [ $OPTARG = "012345" ]

Есть ли более элегантное решение, чем это?

ОБНОВЛЕНИЕ

Оказывается, мойв реальном коде отсутствовал символ «:», поэтому параметр не ожидал аргумента.Я не знаю, почему строковое значение распечатало то, что ожидалось, но числовой аргумент работает теперь, я указал, что параметр принимает аргумент.

1 Ответ

0 голосов
/ 12 января 2012

Оказывается, что в используемом коде отсутствует символ ':', поэтому параметр не ожидал аргумента. Изменение с getopts :s на get opts :s: решило проблему. Обратите внимание, что начальное двоеточие имеет другое значение - его включение отключает вывод ошибок для getopts, поэтому нераспознанные параметры не будут сообщаться.

...