POSIX getopts отказывается подтверждать числовое значение $OPTARG

Я использую 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 ответ

Решение

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

Другие вопросы по тегам