У меня есть скрипт, который начинается с getopts и выглядит следующим образом:
USAGE() { echo -e "Usage: bash $0 [-w <in-dir>] [-o <out-dir>] [-c <template1>] [-t <template2>] \n" 1>&2; exit 1; }
if (($# == 0))
then
USAGE
fi
while getopts ":w:o:c:t:h" opt
do
case $opt in
w ) BIGWIGS=$OPTARG
;;
o ) OUTDIR=$OPTARG
;;
c ) CONTAINER=$OPTARG
;;
t ) TRACK=$OPTARG
;;
h ) USAGE
;;
\? ) echo "Invalid option: -$OPTARG exiting" >&2
exit
;;
: ) echo "Option -$OPTARG requires an argument" >&2
exit
;;
esac
done
more commands etc
echo $OUTDIR
echo $CONTAINER
Я довольно новичок в getopts.Я проводил тестирование этого сценария, и на каком-то этапе мне не нужно было / не нужно использовать аргумент -c [-c].Другими словами, я пытался протестировать другую конкретную часть скрипта, вообще не задействовав переменную $ CONTAINER.Поэтому я просто добавил # перед всеми командами с помощью $ CONTAINER и провел некоторое тестирование, которое было хорошо.
При тестировании сценария без использования $ CONTAINER я набрал:
bash script.bash -w mydir -o myoutdir -t mywantedtemplate
Тем не менее, мне было интересно, учитывая мою команду getopts, я не получил предупреждение.Другими словами, почему я не получил предупреждение с аргументом -c.Это возможно?Предупреждение появляется только в том случае, если я ввожу:
bash script.bash -w mydir -o myoutdir -t mywantedtemplate -c
ОБНОВЛЕНИЕ
После некоторого тестирования я думаю, что это так:
- Если вы не напишите явно «-c», getopts не «попросит» вас об этом и не выдаст ошибку (если ваш скрипт не делает с этим что-то - т.е. если вы не поставили # перед каждымкоманда, использующая этот аргумент)
- Ошибка появляется только в том случае, если вы поставили «-c»
Это правильно?