-1

引数を入力するbashスクリプトを書いています。コマンドは次のようになります。

command -a -b -c file -d -e

特定の場所 ($1、$2、$3) で特定の引数 (-b) を検出したい

#! /bin/bash
counter=0
while [ counter -lt $# ]
do
    if [ $($counter) == "-b" ]
    then
        found=$counter
    fi
    let counter+=1
done

で問題が発生し$($counter)ます。$counter引数の値を呼び出す方法はありますか? たとえば ifの場合counter=2、引数の値を呼び出したいとします$2$($counter)動作しません。

4

1 に答える 1

2

ループを作り直すことで、これを実行しなくても実現できますgetopts(それでも推奨されます)。

counter=1
for i in "$@"; do
  if [[ $i == -b ]]; then
      break
  fi
  ((counter+=1))
done

引数の位置を反復するのではなく、引数を直接反復するだけです。


bash次の構文を使用して、間接的なパラメータ展開も許可します。

#! /bin/bash
counter=0
while [ counter -lt $# ]
do
    if [ ${!counter} = "-b" ]  # ${!x} uses the value of x as the parameter name
    then
        found=$counter
    fi
    let counter+=1
done
于 2013-10-17T13:31:55.250 に答える