选项不在Unix中解析为Argument

时间:2015-03-06 23:52:48

标签: bash command-line-arguments getopt getopts

我有一个现有的脚本工作$ 1 $ 2 $ 3等。我想添加一个可选参数而不会打扰订单。

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

2 个答案:

答案 0 :(得分:3)

通常的解决方案是使用getopts扫描并处理可选的标志选项,然后执行命令:

shift $((OPTIND-1))

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

答案 1 :(得分:1)

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

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

foo=$1
bar=$2
baz=$3

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