2

Я пытаюсь обработать флаги после первого аргумента в моем bash-скрипте, но getopts возвращает флаги только перед аргументом.

or flag in getopts; do
    case $flag in
        d)
            echo "-d flag was triggered!" >&2
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            ;;
    esac
done

и когда я запускаю его, я хотел бы, чтобы в этом примере для "флаг был запущен!msgstr "строка для печати три раза, а не один раз.

$ ./myscript.sh -d arg1 -d -d -d
getopts
-d (develop mode) was triggered!

1 ответ1

1

Ознакомьтесь с этим руководством по GetOpt. в этом случае похоже, что вы пренебрегли своей opstring

попробуйте что-то вроде:

for flag in getopts "M:d:a"; do
    case $flag in
...

Это означает, что вы ожидаете возможные допустимые опции -d -M и -a. :: указывает, что -d и опции принимают параметр (: идет перед рассматриваемой опцией), так что вы можете вызвать его как

./somescript -M -d sometext -a somemoretext

также не используйте дублирующиеся параметры. это приведет к непредсказуемым результатам для различных систем и оболочек.

http://wiki.bash-hackers.org/howto/getopts_tutorial

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .