[英]Handling flags for a shell script without getopts
我已经为/bin/sh
posix shell创建了一个脚本,该脚本使用getopts
实用程序来处理标志,现在我意识到这可能不是我的最佳选择,它是一个外部依赖关系,最终它甚至没有那么灵活,可能对于1个字符长的标志很好,但是我想使用更多的“冗长”和直观的标志,例如--config
或--value-for-a=42
。
假设我想实现一些自包含的东西,那有什么选择呢?
这是一种快速而肮脏的方法:
AAA=default
# example: BBB left unspecified so you can optionally override from environment
XYZ=${XYZ:-0} # optional so you could override from environment
ABC=${ABC:-0}
while test $# -gt 0 ; do
# switches
if test "$1" = "--flag-xyz" ; then XYZ=1 ; shift ; continue; fi
if test "$1" = "--flag-abc" ; then ABC=1 ; shift ; continue; fi
# options with arguments
case "$1" in
--option-aaa=*) AAA="${1##--option-aaa=}" ; shift; continue; break ;;
--option-bbb=*) BBB="${1##--option-bbb=}" ; shift; continue; break ;;
esac
# unknown - up to you - positional argument or error?
echo "Unknown option $1"
shift
done
根据需要定制。
该方法的优点是它与顺序无关,可以根据需要在语法中调整边缘情况的选项。 否则很简单。
如果需要强制执行排序,则在需要时将处理分成多个语句,并从相关的while语句中断开。
缺点是getopt有时会避免一些重复。
编辑:更改[==]和-gt进行测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.