我遇到了以下代码段,并且不确定while循环中 - ?的确切目的是什么。我在多个网站和论坛中搜索了这个参数,但无法得到任何确切的答案。
请输入任何信息,谢谢。
while [[ $1 = -? ]]; do
case $1 in
-a) a1=alligator ;;
-b) a2=bear ;;
-c) a3=cougar ;;
esac
shift
答案 0 :(得分:2)
在ksh中,在双括号内,=
和==
运算符用于模式匹配:[[ string = pattern ]]
[1]
这些是shell路径名扩展模式。 ?
将匹配任何单个字符。
所以你要测试的是$1
是否匹配连字符后跟任何单个字符。换句话说,第一个位置参数是否类似于选项字符串。
[1] - 要执行字符串相等性检查,您的模式要么不包含特殊的通配符,要么引用或转义此类字符。
IMO,一种更健壮的选项解析方法是内置getopts
:
while getopts :abc opt; do
case $opt in
a) a1=alligator ;;
b) a2=bear ;;
c) a3=cougar ;;
:) print -u2 "error: missing required argument for -$OPTARG" ;;
?) print -u2 "unknown option: -$OPTARG" ;;
esac
done
shift $((OPTIND - 1))