動的変数名を持つ if ステートメント

動的変数名を持つ if ステートメント

動的変数を作成しました。

for (( c=1; c<=2; c++ ))
do  
   eval "prev$c=$number";
done

prev1prev2

for (( c=1; c<=2; c++ ))
do  
   eval "current$c=$number";
done

current1current2

変数があれば

$prev1はい1
$prev2はいはい2
$current11
$current23

ループ内のケースと比較するには?以下は間違った内容です。誰かが構文を変更できますか?よろしくお願いします。

for (( c=1; c<=2; c++ ))
do  
 if ((prev$i != current$i)); then
    echo "prev$i is $prev[i] and current$i is $current[i], they are different"
  fi
done

ベストアンサー1

Bashでは変数間接参照を使用できます

    prev=prev$c
    current=current$c

    if ((${!prev} != ${!current})); then
        echo "prev$c is ${!prev} and current$c is ${!current}, they are different"
    fi

ただし、配列を使用する方が安全です(評価は不要)。

#! /bin/bash
number=0
for (( c=1; c<=2; c++ )) ; do
    prev[c]=$number
    number=$c
    current[c]=$number

    if ((${prev[c]} != ${current[c]})); then
        echo "prev$c is ${prev[c]} and current$c is ${current[c]}, they are different"
    fi
done

おすすめ記事