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

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

Bash 手册说

getopts optstring name [args]

当遇到选项末尾时,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

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

谢谢。

答案1

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

相关内容