gpt4 book ai didi

bash - 在 getopts 之后使用 shift $((OPTIND-1)) 的原因是什么?

转载 作者:行者123 更新时间:2023-11-29 09:07:39 24 4
gpt4 key购买 nike

我意识到 shift 将 cli args 数组向左移动 n 个空间,n 的默认值为 1。这意味着我可以在 while 循环内使用 $1 shift 将数组的值分配给现有变量。我不太明白的是为什么在下面的上下文中使用它。输入参数已经被赋值,删除 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))

最佳答案

shift从参数列表中移除getopts循环处理的参数,这样脚本的其余部分就可以用$1...in处理命令行的剩余部分(如果有的话)通常的方式,不关心 getopts 处理的选项数量。

考虑一个假设的脚本及其用法

frobble [-f] [-c] [-a hostname] filename ...

上面的 getopts 循环负责解析 -f-c-a,如果它们存在,但不会将它们从参数列表中删除。这意味着要获取文件名参数,您需要找出处理了多少选项,然后从那里继续处理。方便的是,getopts 告诉您第一个未处理参数的索引:变量 OPTIND

而不是弄乱偏移量和东西,你可以只丢弃处理过的选项,重新编号其余的参数,这样你的文件名总是 $1

这就是 shift $((OPTIND-1)) 所做的。

关于bash - 在 getopts 之后使用 shift $((OPTIND-1)) 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26294218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com