如何在 zparseopts 中强制选择一个选项(不是选项的参数)?

如何在 zparseopts 中强制选择一个选项(不是选项的参数)?

在下面的例子中:

function zp () {
    zparseopts -E -walk:=o_walk
    echo "walk: $o_walk"
}

我得到以下输出:

$ zp --walk "Walking"
walk            : --walk Walking
$ zp --walk
zp:zparseopts:2: missing argument for option: -walk
walk            :

这里选项的参数是强制性的,所以我收到此错误。

如何使该选项成为强制选项,以便我必须传递--walkzp其他选项,否则它将引发错误?

答案1

我不太清楚zparseopts,但我认为getopt没有,而且我只看到对强制参数的引用在手册中为了zparseopts

您始终可以手动检查是否设置了结果选项:

function zp () {
    if ! zparseopts -E -walk:=o_walk; then
        return 1
    fi
    if [ $#o_walk = 0 ]; then
        echo "required option --walk missing" >&2
        return 1
    fi
    echo "walk: $o_walk"
}

在这里,zparseopts如果给出的选项不带参数,则失败,第二个if显式测试o_walk数组是否有任何项目。

使用关联数组来收集参数也是一种选择,对我来说,它感觉更干净:

function zp () {
    if ! zparseopts -E -A opts -walk: ; then
        return 1
    fi
    if ! [ ${opts[--walk]+x} ]; then
        echo "required option --walk missing" >&2
        return 1
    fi
    echo "walk: $opts[--walk]"
}

相关内容