
次のような配列があります:
moduleList=(AB, ABCdef, ABCd)
私の配列は連想配列ではなく、数値インデックス配列です。配列内の各要素を正確に一致させて、特定のタスクを実行したいと考えています。
現在、私は次のようにしています:
if [[ ${moduleList["AB"]} ]]; then
#do this.
fi
if [[ ${moduleList["ABCdef"]} ]]; then
#do that.
fi
しかし、それぞれの単語にあるように、両方の条件が真になっています"AB"
。完全一致に基づいて各条件を区別するにはどうすればよいでしょうか。
答え1
${moduleList["AB"]}
または、引用符なしの同じコードはAB
、 という変数の値を取得し、それをインデックスとして使用します。その変数が設定されていない場合、取得する値はゼロであり、AB
配列のゼロ番目の項目である に展開されます。これは空でない文字列なので、真です。
しかし、各単語に「AB」が含まれているため、両方の条件が満たされます。
これは単純に理由ではありません。 、${moduleList["x"]}
または他のものでも同様の結果が得られます。または、名前付き変数は数値に設定すると、配列内の適切な項目が取得されます。
$ moduleList=(AB, ABCdef, ABCd)
$ unset x
$ echo "${moduleList[x]}"
AB,
$ x=2
$ echo ${moduleList["x"]}
ABCd
一致する文字列が存在するかどうかを確認するには、配列をループするか、連想配列に変更してその中の文字列をキーとして使用する必要があります。
また、代入時にカンマは不要である可能性が高いことに注意してください。上記のように、値にはリテラルのカンマが入ります。