Как я могу использовать getopts без параметра?

while getopts ":a:f:l:r:h:v:" arg; do
   printf $arg
   case $arg in
     a)
        add_param=${OPTARG}
        ;;
     f)
        file_param=${OPTARG}
        ;;
     l)
        list_param=${OPTARG}
        ;;
     r)
       remove_param=${OPTARG}
       ;;
     v)
       version_param="version"
       printf "hello world"
       ;;
     h | *)
       print_usage
       exit_script
   esac
done

Я никогда не получаю в случае -v если я запускаю свой скрипт как этот sh script.sh -v потому что эта реализация ожидает параметр.

Можете ли вы помочь мне исправить это?

1 ответ1

1

Из help getoptsbash):

getopts: getopts optstring name [arg]
    Parse option arguments.

    Getopts is used by shell procedures to parse positional parameters
    as options.

    OPTSTRING contains the option letters to be recognized; if a letter
    is followed by a colon, the option is expected to have an argument,
    which should be separated from it by white space.

Я думаю, что это справедливо и для sh . Вы должны попробовать ":a:f:l:r:hv" вместо ":a:f:l:r:h:v:" .

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