我有一个现有的脚本工作$ 1 $ 2 $ 3等。我想添加一个可选参数而不会打扰订单。
我们是否有一些现成的解决方案: 如果找到有效选项(使用getopts),则不应将此参数索引视为参数。
答案 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
一个额外的实例。