15

私のシェルスクリプトは、次のように非常に単純です。

  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か?

4

1 に答える 1

19

によるとman getoptsOPTINDは処理される次の引数のインデックスです(開始インデックスは1です)。したがって、

sh foo.sh -abc CCC Blankarg1ではがで-abcあるため、a次がba 1)であるときにarg1を解析し続けています。nextが、の場合も同じですがc、まだarg1(b 1)にあります。にいるときは、引数()が必要なcのでis (arg2はCCCであり、スキップします)。cCCCOPTIND3

では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引数には(1:-ab、2:-c、3:CCCおよび4 :)がありBlankます。したがって、次のようになりますa 1, b 2, c 4

sh foo.sh -a -bc CCC Blankargsには(1:-a、2:-bc、3:CCC、4 :)があり、。Blankを取得しa 2, b 2, c 4ます。

于 2013-01-10T03:42:49.080 に答える