在下面的例子中:
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 :
这里选项的参数是强制性的,所以我收到此错误。
如何使该选项成为强制选项,以便我必须传递--walk
给zp
其他选项,否则它将引发错误?
答案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]"
}