我需要在bash脚本中获得4个选项(每个选项都包含短版和长版)。
这是我做的:
OPTS=`getopt -l :author,icon,channel,message: -o :aicm: -- "$@"` ||
exit 1
eval set -- "$OPTS"
while true; do
case "$1" in
-a|--author) echo "A:'$2'"; shift;;
-i|--icon) echo "I:'$2'"; shift 2;;
-m|--message) echo "M:'$2'"; shift 2;;
-c|--channel) echo "C:'$2'"; shift 2;;
--) shift; break;;
*) echo Error; exit 1;;
esac
done
这就是我得到的:
命令
docker run --rm -e SLACK_TOKEN slacker notify --channel foo
输出
C:'--'
Error
当然,我希望得到这样的结果:
C:'foo'
答案 0 :(得分:1)
您的getopt
命令看起来有点时髦。您好像使用:
作为某种分隔符,在这里:
-l :author,icon,channel,message:
在这里:
-o :aicm:
这没有任何意义。 :
在选项定义中具有特殊含义;看一下getopt(1)
手册页:
-l, --longoptions longopts
要识别的长(多字符)选项。超过一个 通过分隔名称,可以一次指定选项名称 用逗号。这个选项可能不止一次,longopts 是累积的。 可以遵循longopts中的每个长选项名称 用一个冒号表示它有一个必需的参数,用两个冒号 表明它有一个可选参数。
短期权也是如此。
因此,假设您的所有选项都带有参数,您可以写:
OPTS=`getopt -l author:,icon:,channel:,message: -o a:i:c:m: -- "$@"` ||