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 виден.

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