向getopt传递参数时,参数的顺序必须与解析顺序相同吗?
我想使用 getopt 来解析我的输入,例如 --count=123 --range=456 --err
这是我的测试代码:
argv=$(getopt --name `basename $0` --options '' --longoptions err::,count:,range: -- "$@") 2>&1 || show_usage
eval "set -- ${argv}"
echo "debug> [$argv]"
while true; do
case "$1" in
"--count")
echo "HitCount=$2"
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
shift 2
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
;;
"--range")
echo "ScanRange=$2"
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
shift 2
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
break
;;
"--")
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
shift
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
break
;;
*)
show_usage
break
;;
esac
done
test1: it's good
./getopt.sh --count=1234 --range=5678
debug> [ --count '1234' --range '5678' --]
HitCount=1234
debug> [--count/1234/--range/5678/--///]
debug> [--range/5678/--/////]
ScanRange=5678
debug> [--range/5678/--/////]
debug> [--///////]
test2: 我只更改命令行中的顺序,但是它无法解析“--count”。我不知道为什么?
./getopt.sh --range=5678 --count=1234
debug> [ --range '5678' --count '1234' --]
ScanRange=5678
debug> [--range/5678/--count/1234/--///]
debug> [--count/1234/--/////]
I want to use getopt to parsing my input, such as --count=123 --range=456 --err
Here is my test code:
argv=$(getopt --name `basename $0` --options '' --longoptions err::,count:,range: -- "$@") 2>&1 || show_usage
eval "set -- ${argv}"
echo "debug> [$argv]"
while true; do
case "$1" in
"--count")
echo "HitCount=$2"
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
shift 2
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
;;
"--range")
echo "ScanRange=$2"
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
shift 2
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
break
;;
"--")
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
shift
echo "debug> [$1/$2/$3/$4/$5/$6/$7/$8]"
break
;;
*)
show_usage
break
;;
esac
done
test1: it's good
./getopt.sh --count=1234 --range=5678
debug> [ --count '1234' --range '5678' --]
HitCount=1234
debug> [--count/1234/--range/5678/--///]
debug> [--range/5678/--/////]
ScanRange=5678
debug> [--range/5678/--/////]
debug> [--///////]
test2: I only change the order in command line, but it cannot parsed "--count". I don't know why?
./getopt.sh --range=5678 --count=1234
debug> [ --range '5678' --count '1234' --]
ScanRange=5678
debug> [--range/5678/--count/1234/--///]
debug> [--count/1234/--/////]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不。
在
"--"
之前有break
,因此它会中断循环。No.
You have
break
before"--"
so it breaks the loop.