我知道移CLI ARGS n间隔的阵列向左移动,并且n的默认值是1.这意味着我可以分配阵列现有可变因素使用$ 1 while循环移位的值.我不太明白为什么在下面这个背景下使用它.输入参数已经分配给值,删除shift $((OPTIND-1))不会改变这个事实.资料来源:http: //linux.die.net/man/3/optind
while getopts ":h:a:fc" opt; do
case $opt in
h)
print_help
exit 0
;;
a)
aaaa=${OPTARG}
;;
f)
force=1
;;
c)
CLEAN=1
;;
\?)
echoerr "Invalid option -$OPTARG"
print_help
exit 1
;;
esac
done
shift $((OPTIND-1))
Run Code Online (Sandbox Code Playgroud)
Ped*_*erg 13
该移位getopts从参数列表中删除循环处理的参数,以便脚本的其余部分可以以通常的方式处理命令行的剩余部分(如果有的话),而不用考虑选项的数量处理getopts.
考虑一个带有用法的假设脚本
frobble [-f] [-c] [-a hostname] filename ...
Run Code Online (Sandbox Code Playgroud)
在getopts上面的循环负责解析的-f,-c并且-a,如果它们存在,但不会从参数列表中删除.这意味着要获取您的文件名参数,您需要找出处理了多少选项,并从那里继续处理.方便地,getopts告诉您第一个未处理的参数的索引:变量OPTIND.
而不是搞乱偏移和东西,你可以丢弃已处理的选项,重新编号其余的参数,以便你的文件名始终$1.
这是做什么的shift $((OPTIND-1)).