別の変数からパラメータを読み取る方法

別の変数からパラメータを読み取る方法

コマンドラインからパラメータを読み取るのはとても簡単です。$1 $2 $3

しかし!分散ループをしたい場合は、入力を介したくない単一の$1 to $arg1処理方法を学びたいと思います。ループはどうしますか?$2 to $arg2arg1=$1; arg2=$2$

増やすには、$arg追加して$arg$nr 計算するだけです$nr。しかし、これをどのように処理しますか$1$$nr動作しない..

答え1

配列を持つシェルの場合、伝統的な答えは配列を使用することです。

arg=( "$@" )

$1その後、in ${arg[0]}$2in${arg[1]}などがあります。

これを繰り返すには、次のようにします。

for a in "${arg[@]}"; do
    # code that uses "$a" goes here
done

または、位置引数リストにまだデータがあり、入力を減らしたい場合は、

for a do
    # code that uses "$a" goes here
done

元のパラメータのデータが分割されたり、グローブパターンとして使用されるのを防ぐために、引用が重要です。

答え2

伝統的な答えはを使用することですeval

for ((i=1; i<=$#; i++))
do
    eval "arg$i=\${$i}"
done

(中括弧はinのように必要であり、bash代わりに$10解釈されます。)${1}0${10}

関連情報