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, поэтому о нераспознанных параметрах не сообщается.