0

ユーザー定義の回数を実行するループ内で、宣言、値の割り当て、および変数の呼び出しを試みています。これらの変数をループ後に使用できるようにしたいと思います。私がやろうとしていることは次のとおりです。

echo "HOW MANY ROUNDS OF TEST ITERATIONS WOULD YOU LIKE TO RUN?"
read round_nr
echo "Number of Iteration rounds set to: $round_nr!"

for r in $(seq 1 $round_nr); do
    echo "HOW MANY COLD TEST ITERATIONS DO YOU WANT IN ROUND $r?"
    read COLD$r
    echo "HOW MANY WARM TEST ITERATIONS DO YOU WANT IN ROUND $r?"
    read WARM$r
    echo "HOW MANY HOT TEST ITERATIONS DO YOU WANT IN ROUND $r?"
    read HOT$r
    echo "HOW MANY NR OF FIXES PER TEST ITERATION $r?"
    read NUMFIX$r
    echo "ITERATION $r INPUT VALUES: COLD/WARM/HOT/NUMFIX:"
    echo $COLD$r $WARM$r $HOT$r $NUMFIX$r
done  

このようにして、すべてのループ (ユーザーが定義した round_nr ループのセット内) で 4 つの変数が作成され、ユーザー入力値が割り当てられます。後でこれらの変数を使用する予定です。

助けてくれてありがとう!

4

2 に答える 2

2

確かにを使用できますがdeclare、配列を使用する方がはるかに簡単です。(ここではスペースを節約するために-pフラグをread使用します。使用する必要はありません。)

for r in $(seq 1 $round_nr); do
    read -p "HOW MANY COLD TEST ITERATIONS DO YOU WANT IN ROUND $r?" ans
    declare "COLD$r=$ans"
    read -p "HOW MANY WARM TEST ITERATIONS DO YOU WANT IN ROUND $r?" ans
    declare "WARM$r=$ans"
    read -p "HOW MANY HOT TEST ITERATIONS DO YOU WANT IN ROUND $r?" ans
    declare "HOT$r=$ans"
    read -p "HOW MANY NR OF FIXES PER TEST ITERATION $r?" ans
    declare "NUMFIX$r=$ans"
    echo "ITERATION $r INPUT VALUES: COLD/WARM/HOT/NUMFIX:"

    # Here's the tricky part. It's easier to create the variable than it
    # is to use it.
    varcold="COLD$r"
    varwarm="WARM$r"
    varhot="HOT$r"
    varnumfix="COLD$r"

    echo ${!varcold} ${!varwarm} ${!varhot} ${!varnumfix}
done  

配列を使用すると、それは単純です

for r in $(seq 1 $round_nr); do
    read -p "HOW MANY COLD TEST ITERATIONS DO YOU WANT IN ROUND $r?" cold[r]
    read -p "HOW MANY WARM TEST ITERATIONS DO YOU WANT IN ROUND $r?" warm[r]
    read -p "HOW MANY HOT TEST ITERATIONS DO YOU WANT IN ROUND $r?" hot[r]
    read -p "HOW MANY NR OF FIXES PER TEST ITERATION $r?" numfix[r]
    echo "ITERATION $r INPUT VALUES: COLD/WARM/HOT/NUMFIX:"
    echo ${cold[r]} ${warm[r]} ${hot[r]} ${numfix[r]}
done

いずれの場合も、ループをサブシェルで実行forするために何もしない限りfor(パイプラインに配置したり、囲んだりする(...)など) 、変数はすべてループの後で使用できます。

于 2013-03-06T16:44:00.503 に答える
0

eval配列を使用することも (おそらく推奨される方法)、体操を行うこともできます。bash の man ページには、どちらかを実行するために知っておく必要があるすべての情報が含まれています。

于 2013-03-06T16:24:35.590 に答える