/bin/sh:使用 getopt 解析长选项,形式为 --parameter='value'



我有以下片段来解析/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 "n33[1;31m Error:33[0m Failed to parse options...exiting.nn"
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 "n33[1;31m Error:33[0m Invalid option: 33[1;31m-$OPTARG33[0mnn"
exit 1
;;
esac
done

echo $@ = $@

我必须更改什么才能使用--exclude='foo'

您需要指定--exclude可以通过在名称后附加:来接受参数。

OPTS=$(getopt --options 'n' --long 'exclude:,dry-run' --name "$0" -- "$@")

来自手册页:

-l,--longoptionslongopts

要识别的长(多字符(选项。更多一次可以指定多个选项名称用逗号分隔名称。此选项可能是给定一次以上,longopts是累积的每个longopts中的长选项名称后面可以跟一个冒号表示它有一个必需的参数,和两个冒号以指示它具有可选参数。

相关内容

  • 没有找到相关文章

最新更新