我完全能够使用以下语法管理带参数的标志:
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
-c)
ARGUMENT_OF_C_FLAG="$2"
shift # past argument
;;
*)
;;
esac
done
如何使用相同的语法(没有getopts
)来管理没有参数的标志?
我尝试对没有参数的标志使用相同的语法,但它不起作用。例如,对于带参数的标志c和没有参数的标志d,我没有成功使用
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
-c)
ARGUMENT_OF_C_FLAG="$2"
shift # past argument
;;
-d)
IS_d_FLAG_SET=1
;;
*)
;;
esac
done
答案 0 :(得分:2)
首先,您必须使用ge
而不是gt
进行测试,否则当没有选项的情况下只有一个开关时,您不会进入循环。
然后你必须在每个循环中shift
或者你将拥有无限循环
当参数超过选项而不是参数时,您执行的shift
错误由gt
代替ge
补偿
while [[ $# -ge 1 ]]
do
key="$1"
case $key in
-c)
ARGUMENT_OF_C_FLAG="$2"
shift # past switch, argument will be skipped by the shift below
;;
-d)
IS_d_FLAG_SET=1
;;
*)
echo "unexpected option $key"
;;
esac
shift
done
echo $ARGUMENT_OF_C_FLAG
echo $IS_d_FLAG_SET