Як я можу використовувати “getopts” без параметра? (тут для "-v")


0

Як я можу використовувати параметр 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

З 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:".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.