#!/bin/bash
while getopts 'a:b:' opt; do
case "$opt" in
a) printf 'Got a: "%s"\n' "$OPTARG" ;;
b) printf 'Got b: "%s"\n' "$OPTARG" ;;
*) echo 'error' >&2
exit 1
esac
done
shift "$(( OPTIND - 1 ))"
printf 'Other argument: "%s"\n' "$@"
运行它:
$ bash script.sh -a hello -- -b world
Got a: "hello"
Other argument: "-b"
Other argument: "world"
如您所见,-b world命令行的位未被处理getopts。
--它在第一个非选项参数处或第一个非选项参数处停止解析命令行:
$ bash script.sh something -a hello -- -b world
Other argument: "something"
Other argument: "-a"
Other argument: "hello"
Other argument: "--"
Other argument: "-b"
Other argument: "world"
行为是它停止解析命令行并保持其余参数不变。
--
本身已被删除(或者更确切地说,$OPTIND
将表明它已被处理,但$opt
在下面的代码中永远不会被删除-
,如果你shift "$(( OPTIND - 1 ))"
像往常一样,你将永远不会看到它)。例子:
运行它:
如您所见,
-b world
命令行的位未被处理getopts
。--
它在第一个非选项参数处或第一个非选项参数处停止解析命令行:在这种情况下,没有
--
被“删除”,因为从未走到那一步。getopts