在脚本里面使用 getopts 获取参数。
示例
test2.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| #!/bin/bash
function main() {
local OPTIND
count=0
while getopts ab:-: OPT
do
echo "current -${OPT}${OPTARG}"
case "${OPT}" in
-)
case "${OPTARG%%=*}" in
atest)
echo "option: --${OPTARG}"
echo ""
let count++
;;
btest)
echo "option: --${OPTARG%%=*}"
echo "value: ${OPTARG#*=}"
echo ""
let count=count+2
;;
esac
;;
a)
echo "option: ${OPTIND}"
echo ""
let count++
;;
b)
echo "option: ${OPTIND}"
echo "value: ${OPTARG}"
echo ""
let count=count+2
;;
esac
done
shift $count
echo "rest option(s): $@"
}
main "$@"
|
执行:
bash test2.sh --atest --btest="2 4" -- --ctest=3 --dtest=4
结果:
1
2
3
4
5
6
7
8
| current --atest
option: --atest
current --btest=2 4
option: --btest
value: 2 4
rest option(s): --ctest=3 --dtest=4
|
解释
与 getopt 相比:
- while 里面不能使用 shift,必须在结束之后统一 shift
- 长选项不能用纯空格隔开
- 放在 function 里面的时候,必须先执行
local OPTIND
- 不必另外处理
--
的情况