遇到选项结束时 getopts 会发生什么

Tim*_*Tim 0 bash getopts

Bash手册说

getopts optstring name [args]
Run Code Online (Sandbox Code Playgroud)

当遇到选项结束时,getopts以大于零的返回值退出。OPTIND设置为第一个非选项参数的索引并name设置为?

Bash Hackers Wikigetopts教程中的一个示例中:

while getopts ":a" opt; do
  case $opt in
    a)
      echo "-a was triggered!" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)

当遇到选项结束时,getopts以大于零的返回值退出,因此 while 循环将停止。那么在while循环内部,里面的部分是 \?)不是从来没有到达过?如果是,为什么会在那里?

谢谢。

Ste*_*itt 5

它可以处理无效的选项。在示例中,如果您运行script -a,则该-a选项是预期的并导致“-a已触发!”。如果您运行script -b,-b则无效并将由\?案例处理,从而导致“无效选项:-b”。