选项在 Unix 中不解析为参数

Options not parse as Argument in Unix

我有一个适用于 $1 $2 $3 等的现有脚本。我想添加一个可选参数而不打乱顺序。

我们是否有一些现成的解决方案: 如果找到有效选项(使用 getopts),则不应将此参数索引视为参数。

使用 getopts 时的典型方法是循环直到看到第一个非选项项:

while [[  = -* ]]; do
  # handle  here
  shift
done

foo=
bar=
baz=

如果您的选项本身带有参数 (--directory /somewhere),那么您只需要 shift 一个额外的实例。

通常的解决方法是使用getopts扫描并处理optional flag选项,然后执行命令:

shift $((OPTIND-1))

getopts完成后,$OPTIND将是第一个尚未处理的参数的编号。 shift 命令然后删除第一个 OPTIND-1 个参数,这有效地将未处理的参数重新编号为 </code>、<code>、....