【发布时间】:2016-05-23 17:02:41
【问题描述】:
我很难理解如何让 getopts 接受带有单个参数的多个标志。例如。
标志:孩子:a - 亚当 b - 贝丝 c - 凯茜 d - 邓肯
必填参数:冰淇淋口味
(不是我的脚本真正做的,但这样拼出来最容易)
我现在能做什么:
./flavor -a chocolate
./flavor -c chocolate
我想做的事:
./flavor -acd chocolate
到目前为止,我能做到的不仅仅是它:
./flavor -a chocolate -c chocolate -d chocolate
我用 getopts 尝试的每个变体要么根本看不到参数,要么在每个标志声明之后都需要它。我觉得我错过了一些明显的东西,这会给我“啊哈”的时刻,但我自己并没有看到它。谁能指出我正确的方向?
=============================================
while getopts ":a:b:c:d:" opt; do
case $opt in
a)
do stuff with $OPTARG
;;
b)
do stuff with $OPTARG
;;
c)
do stuff with $OPTARG
;;
d)
do stuff with $OPTARG
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
=============================================
如果这是一个非常愚蠢的问题,我深表歉意,并感谢您的宝贵时间。
【问题讨论】:
-
你没有错过任何东西;没有办法指定单个参数应由组中的所有选项共享。
-
我相信你做不到,但我可能错了。对于
./flavor -acd,a 将消耗 cd 作为其$OPTARG。