1

を使用してコマンドライン引数を取るシェルスクリプトがありますgetopt。私のスクリプトのその部分は問題ありませんが、特定の引数を複数回送信できる特別なケースが必要です。

これが私がそれをどのように扱っているかの要旨です:

#!/bin/sh

i=0

# once in the case statement I do the following:
while true
do
   case "$1" in

   -p) 
      paramList[$i]=$2
      ((i++))
      shift 2
      ;;
done

これはparamList配列を適切に設定しています(私は思う)が、次のことを試みるたびに:

for param in $paramList
do
   echo "Params: $param"
done

最初のパラメーターのみを返します。したがって、それを行う./myscript -p blah -p blah2 -p blah3と、 が返されますblah

私は何を間違っていますか?

4

2 に答える 2

1

ステートメントでは、case次のように配列に追加するだけです。

-p) 
   paramList+=( "$2" )
   shift 2
   ;;

インデックスは必要ありません。

配列を反復処理するには:

for param in "${paramList[@]}"
do
   echo "Params: $param"
done
于 2013-06-25T16:17:02.053 に答える
1

これを行うだけで配列を作成できます。

paramList=( "$@" )

次に、次のようにしてそれらを反復処理できます。

for param in "${paramList[@]}"
do
   echo "Params: $param"
done
于 2013-06-25T16:13:15.253 に答える