gpt4 book ai didi

bash - OPTIND 变量如何在 shell 内置 getopts 中工作

转载 作者:行者123 更新时间:2023-11-29 08:49:26 24 4
gpt4 key购买 nike

我的shell脚本很简单,如下:

  while getopts "abc:" flag; do
echo "$flag" $OPTIND $OPTARG
done

我做了如下测试:

Blank@Blank-PC:~/lab/shell/getopts_go$ sh foo.sh -abc CCC Blank
a 1
b 1
c 3 CCC

Blank@Blank-PC:~/lab/shell/getopts_go$ sh foo.sh -a -b -c CCC Blank
a 2
b 3
c 5 CCC

Blank@Blank-PC:~/lab/shell/getopts_go$ sh foo.sh -ab -c CCC Blank
a 1
b 2
c 4 CCC

Blank@Blank-PC:~/lab/shell/getopts_go$ sh foo.sh -a -bc CCC Blank
a 2
b 2
c 4 CCC

我无法理解 OPTIND 如何与不同的命令行调用一起工作,我对输出感到困惑。

你能帮忙弄清楚OPTIND的计算机制吗?

最佳答案

根据man getoptsOPTIND是下一个要处理的参数的索引(起始索引是1)。因此,

sh foo.sh -abc CCC Blank 中 arg1 是 -abc,所以在 a 之后当 next 是 b(a 1)。当 next 为 c 时也是如此,我们仍在 arg1 (b 1) 中。当我们在 c 时,因为 c 需要一个参数 (CCC) OPTIND3(arg2 是 CCC,我们跳过它)。

sh foo.sh -a -b -c CCC Blank中,arg1是a,arg2是b,arg3是c,arg4 为 CCC。所以我们得到 a 2, b 3, c 5

sh foo.sh -ab -c CCC Blank 中,args 是 (1:-ab, 2: -c, 3: CCC 和 4:空白)。所以我们得到:a 1, b 2, c 4

sh foo.sh -a -bc CCC Blank 中,args 是 (1: -a, 2: -bc, 3: CCC, 4: Blank) 我们得到 a 2, b 2, c 4

关于bash - OPTIND 变量如何在 shell 内置 getopts 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14249931/

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