我的脚本:
run() {
while getopts ":dr" option; do
case "$option" in
d) echo "__DEBUG__";;
r) echo "__RELEASE__";;
esac
done
if [ $option -eq ""]
then
echo "__DEBUG__" ;
fi
}
嗨,我正在使用 zsh。当我调用没有任何选项的运行时
$ 运行
$ __ 调试 __
第一次没关系,显示调试
然后我使用选项 (d/r( 调用并再次调用 run 没有重复,它显示此错误
$ run -r
$ __ 发布 __
$ 运行
$ run-9:解析错误:预期条件:r
我不知道如何解决这个问题,似乎while循环仍然有效
函数开始时的getopts
调用之前重置OPTIND
,在这种情况下不会自动完成。在 bash 中,它设置为在 shell 或 shell 脚本启动时1
,但在调用函数时不设置为。
这似乎是POSIX getopts指定的。
每当调用 shell 时,OPTIND 应初始化为 1。
zsh getopts 的行为不同(感谢@PesaThe(:
OPTIND
的初始值为 1,通常在进入 shell 函数时设置为 1,并在退出时恢复。
此外,当getopts
完成解析后,option
将设置为 ?
,这不会帮助您确定是否提供了(有效(选项。
尝试这样的事情:
run() {
OPTIND=1
found=0
while getopts ":dr" option; do
case "$option" in
d) echo "__DEBUG__"; found=1 ;;
r) echo "__RELEASE__"; found=1 ;;
esac
done
if [ $found -eq 0 ]
then
echo "__DEBUG__" ;
fi
}
或者更简单一点(但与您的不同,以说明(:
run() {
OPTIND=1
mode="__DEFAULT__"
while getopts ":dr" option; do
case "$option" in
d) mode="__DEBUG__" ;;
r) mode="__RELEASE__" ;;
esac
done
echo "$mode"
}