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


14

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

% script -a -b param -c param -d other arguments here

我会:

while getopts "ab:c:d" opt ; do
.
done

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

Answers:


17

解析arg时需要移动或放置

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

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

while test $# -gt 0; do
  echo $1
  shift
done

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

0

在解析结束时,一旦将变量$ @移至该行的末尾:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.