次のような配列があります。
moduleList=(AB, ABCdef, ABCd)
私の配列は、連想配列ではなく数字で索引付けされた配列です。配列の各要素を正確に一致させ、いくつかのタスクを実行したいと思います。
現在私は次のようなことをしています。
if [[ ${moduleList["AB"]} ]]; then
#do this.
fi
if [[ ${moduleList["ABCdef"]} ]]; then
#do that.
fi
"AB"
しかし、すべての単語に反映されているように、両方の条件が実現されました。正確な一致に基づいて各条件を区別する方法。
答え1
${moduleList["AB"]}
または、引用符のない同じメソッドは、名前付き変数の値を取得してAB
インデックスとして使用します。変数が設定されていない場合、得られた値は0で、拡張すると配列AB
の0番目の項目になります。これは空でない文字列なので true です。
しかし、すべての単語に「AB」があるため、両方の条件が真です。
簡単に言えば、それは理由ではありません。あなたは同じ結果を得るでしょう${moduleList["x"]}
。または名前付き変数の場合はい数値に設定すると、配列に適切な項目が表示されます。
$ moduleList=(AB, ABCdef, ABCd)
$ unset x
$ echo "${moduleList[x]}"
AB,
$ x=2
$ echo ${moduleList["x"]}
ABCd
一致する文字列があるかどうかを見つけるには、配列を繰り返すか、連想配列に変更して文字列をキーとして使用する必要があります。
また、割り当てにコンマを使用するのではなく、上記のように値に文字通りのカンマを使用することをお勧めします。