変数が[重複]の場合、bashスクリプト

変数が[重複]の場合、bashスクリプト

値を確認したい変数名に変数を追加するにはどうすればよいですか?私のコードは次のようになり、実行するとエラーが発生します。

[: A_variable: integer expression expected

変数に対してifを実行するとき、正しい構文は次のようにする必要があるためだと思います。 if [ $ A_variable -eq 1 ];しかし、別の変数を入れるので、変数の前にドル記号を入れることはできません。

ほとんど次のようになります: if [ $${letter}_variable またはいくつかの混合ですが、何がわかりません。

array=("A" "B" "C")

A_variable=1
B_variable=2
for letter in "${array[@]}"
do

if [ ${letter}_variable -eq 1 ]; then
...

ベストアンサー1

これは…間接拡張バッシュから。

他の変数によって名前が決定される変数の値を取得する構文は、次のnamevarとおりです。

${!namevar}

変数名は変数と定数文字列で構成されるため、中間ステップが必要です。

array=("A" "B" "C")

A_variable=1
B_variable=2
for letter in "${array[@]}"
do
    varname="${letter}_variable"
    if [ "${!varname}" -eq 1 ]; then
    ...

メモ:間接的に参照された変数が実際に存在しない場合、拡張すると空の文字列が生成され、まだエラーが発生します。これが望ましくない場合は、最初に次の2番目のテストを追加します。

    varname="${letter}_variable"
    if [ "${!varname}" = "" ]; then
        echo "Error: $varname is non-existent or empty"
    elif [ "${!varname}" -eq 1 ]; then
    ...

さらに、一致するすべての変数の内容が事前に安全な値に初期化されていない場合は、拡張結果に予期しない文字が表示されないように二重引用符を使用することをお勧めします。

おすすめ記事