可以将这个getopts_long编写为POSIX shell函数,您可以将其嵌入脚本中。
请注意,Linux getopt
(来自util-linux
)在非传统模式下可以正常工作,并且支持长选项,但是如果您需要移植到其他Unices上,则可能不是您的选择。
最新版本的ksh93(getopts
)和zsh(zparseopts
)内置了对解析长选项的支持,这对您来说可能是一个选项,因为大多数Unices都可以使用这些选项(尽管默认情况下通常未安装)。
另一个选择是使用,perl
并且它的Getopt::Long
模块都应该在当今的大多数Unices中可用,方法是编写整个脚本,perl
或者仅调用perl来解析该选项并将提取的信息馈送到shell。就像是:
parsed_ops=$(
perl -MGetopt::Long -le '
@options = (
"foo=s", "bar", "neg!"
);
Getopt::Long::Configure "bundling";
$q="'\''";
GetOptions(@options) or exit 1;
for (map /(\w+)/, @options) {
eval "\$o=\$opt_$_";
$o =~ s/$q/$q\\$q$q/g;
print "opt_$_=$q$o$q"
}' -- "$@"
) || exit
eval "$parsed_ops"
# and then use $opt_foo, $opt_bar...
查看perldoc Getopt::Long
它可以做什么以及与其他选项解析器的区别。