您可以使用getopts
内部bash功能。尝试这样的例子:
while getopts abc: name; do
echo $name, OPTARG: $OPTARG, OPTIND: $OPTIND, OPTERR: $OPTERR
done
运行:./test -ab -c file
结果:
a, OPTARG: , OPTIND: 1, OPTERR: 1
b, OPTARG: , OPTIND: 2, OPTERR: 1
c, OPTARG: file, OPTIND: 4, OPTERR: 1
变量name
将被设置为解析参数。如果在字符后面有:
,则预期将其置于OPTARG
变量的参数。 OPTIND
显示下一个要处理的参数。
如果设置了OPTERR
,则如果发生错误,则bash将显示错误消息。如果第一个参数是:
那么错误消息被抑制。
运行:./test -d
结果:
./test: illegal option -- d
?, OPTARG: , OPTIND: 2, OPTERR: 1
或./test -c
(-c
需要一个额外的参数)
结果:
./test: option requires an argument -- c
?, OPTARG: , OPTIND: 2, OPTERR: 1
这样你就可以测试是否name
是?
那么这是一个不好的选择。
这工作,但如果我把 “:AB:” 和一个)回声“我的名字是.. B)呼应我的年龄是......如果你做了-ab而不是说另一句话,我应该怎么设置呢? – user2252399
@ user2252399'getopts'只支持一个字符选项,它是内置bash。如果你想要你可以看一下'getopt',它是一个外部工具(不是内置的),它可以处理多字符参数,并带有双短划线前缀。这里的[man page](http://www.manpagez。com/man/1/getopt /) – wizard
@ user2252399 With:ab:b选项需要参数。你可以用'-ab foo'来调用它,并且同时执行两个case标签 - 同时遍历所有选项。 – Jens