我意识到shift将cli args n空间的数组移动到左边,默认的n为1,这意味着我可以使用$1的时间循环将数组的值分配给现有的变量。我不太明白为什么在下面的上下文中使用它。输入args已经分配给值,删除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))发布于 2014-10-10 09:14:20
移位从参数列表中移除由getopts循环处理的参数,以便脚本的其余部分可以使用$1处理命令行的其余部分(如果有的话).按照通常的方式,不关心getopts处理的选项的数量。
考虑一个假设的脚本
frobble [-f] [-c] [-a hostname] filename ...上面的getopts循环负责解析-f、-c和-a (如果它们存在的话),但不会从参数列表中删除它们。这意味着要获得文件名参数,需要找出处理了多少个选项,然后从那里继续处理。方便地,getopts告诉您第一个未处理参数的索引:变量OPTIND。
而且,您可以放弃已处理的选项,重新命名其余的参数,从而使您的文件名始终是$1,而不是干扰偏移量和其他东西。
这就是shift $((OPTIND-1))所做的。
https://stackoverflow.com/questions/26294218
复制相似问题