使用 getopts 提取解析的项目后,如何获得剩余的参数?

Tim*_*Tim 17 bash

我想使用 getopts 将一些参数解析为 bash 脚本,但希望能够访问选项列表中未包含的其余参数。例如,如果我有一个电话:

% script -a -b param -c param -d other arguments here
Run Code Online (Sandbox Code Playgroud)

我会:

while getopts "ab:c:d" opt ; do
.
done
Run Code Online (Sandbox Code Playgroud)

获取“此处的其他参数”的最简单方法是什么,getopts 不应处理这些参数?

小智 18

解析 arg 时需要移动,或放入

完成解析后移动 $((OPTIND -1)) ,然后以通常的方式处理,例如

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done
Run Code Online (Sandbox Code Playgroud)

  • 值得解释的是, $OPTIND 是每次 getopts 运行后要考虑的下一个选项的索引。因此 $* 包含 3 个参数,在第一个有效调用之后它是 2,第二个它是 3。如果 a 调用无效,它将以之前的值退出。因此,如果参数 1 无效,OPTIND 将为 1(因此上面的示例将“shift $(expr 1 - 1)”,这是安全的。 (3认同)