我有以下代码段可解析中的长和短选项/bin/dash
。
该选项-n|--dry-run
不带参数。但--exclude
应采用形式的字符串--exclude='foo'
。要进一步使事情复杂化,--exclude
没有短的选择。
当我使用时script.sh --exclude
,以下代码有效,但是当我使用时script.sh --exclude='foo'
,出现错误:
option '--exclude' doesn't allow an argument
这是我的代码:
#!/bin/sh
OPTS=$(getopt --options 'n' --long 'exclude,dry-run' --name "$0" -- "$@")
if [ $? != 0 ] ; then
printf "\n\033[1;31m Error:\033[0m Failed to parse options...exiting.\n\n"
exit 1
fi
eval set -- "$OPTS"
unset OPTS
# extract options and their arguments into variables.
while true ; do
case "$1" in
--exclude )
EXCLUDE="y"
shift
;;
-n | --dry-run )
DRYRUN="y"
shift
;;
-- )
shift
break
;;
*)
printf "\n\033[1;31m Error:\033[0m Invalid option: \033[1;31m-$OPTARG\033[0m\n\n"
exit 1
;;
esac
done
echo \$\@ = $@
我必须更改什么才能使用--exclude='foo'
?
您需要--exclude
通过:
在名称后附加a来指定可以接受参数的参数。
OPTS=$(getopt --options 'n' --long 'exclude:,dry-run' --name "$0" -- "$@")
从手册页:
-l,--longoptions longopts
长(多字符)选项可以识别。通过用逗号分隔名称,可以一次指定多个选项名称。可以多次给此选项,因为longopts是累积的。longopts中的每个长选项名称都可以在其后跟一个冒号,以表示它具有必需的参数,并在其后跟两个冒号,以表示其具有可选参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句