From f1e94e29c698bd514d4f08fea7775508fe22c8c7 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 10 May 2023 13:31:31 +0300 Subject: [PATCH] =?utf8?q?zparseopts=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82?= =?utf8?q?=D0=BE=20getopts?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 -- 2.48.1