getopts не анализирует мои параметры командной строки
Я использую bash версии 4.2 и пытаюсь проанализировать параметры командной строки с помощью встроенной команды getopts
,
Но getopts, кажется, не анализирует это правильно, если -s
не был первым параметром, он не будет проанализирован
-s
не разобрано:
%> ./getopt.sh aaa -s aaa
aaa
Этот разобрался
%> ./getopt.sh -s aaa
s: aaa
aaa
Сценарий здесь:
#!/bin/bash
while getopts "bs:" opt
do
case $opt in
s)
echo "s: $OPTARG"
;;
*)
echo not supported
;;
esac
shift
done
echo $1
1 ответ
Решение
В отличие от (старше) getopt
, getopts
не переставляет аргументы, чтобы поставить параметры первыми. Поэтому в
./getopt.sh arg1 -s opt1
опция-парсинг останавливается как только не-опция arg1
виден.