zparseopts вместо getopts

Что: f1e94e29c698bd514d4f08fea7775508fe22c8c7

Когда: 2023-05-10 13:31:31+03:00

Темы: zsh

zparseopts вместо getopts

https://linux.die.net/man/1/zshmodules
https://www.zsh.org/mla/users/2011/msg00350.html
Спустя столько лет у меня появился zsh скрипт с опциональными
аргументами. Передавал я их через переменные окружения, что не очень
удобно. Наверняка же в zsh есть какой-нибудь helper для парсинга
аргументов? В моём скрипте мне хватило всего лишь просто помещения в
один ассоциативный массив значений длинных опций.

В рассылке привели более сложный пример с короткими и длинными опциями:

    while getopts dhv opt ; do
        case $opt in
        (d)  setopt xtrace;;
        (h)  print_help
             exit;;
        (v)  print_version
             exit;;
        esac
    done

Если поместить -d и --debug в $opthash[d], то проверить наличие ключа
можно ${opthash[(i)-d|--debug]}. Можно использовать разные массивы:

    local -a debug help vers usage
    zparseopts \
        d=debug -debug=debug \
        h=help -help=help \
        v=vers -version=vers

и $+debug[1] покажет был ли использован debug.
Ну а обработать результат zparseopts можно так:

    [[ -n $debug ]] && setopt xtrace
    [[ -n $version ]] && print_version
    [[ -n $help ]] && print_help
    [[ -n "$help$version" ]] && exit

оставить комментарий

Сгенерирован: SGBlog 0.34.0