
Ich habe ein Array wie:
moduleList=(AB, ABCdef, ABCd)
Mein Array ist ein numerisch indiziertes Array, kein assoziatives Array. Ich möchte für jedes Element im Array eine genaue Übereinstimmung erzielen und bestimmte Aufgaben ausführen.
Momentan mache ich so etwas:
if [[ ${moduleList["AB"]} ]]; then
#do this.
fi
if [[ ${moduleList["ABCdef"]} ]]; then
#do that.
fi
Aber beide Bedingungen sind erfüllt, da "AB"
sie in jedem Wort vorhanden sind. Wie kann ich die einzelnen Bedingungen anhand einer exakten Übereinstimmung unterscheiden?
Antwort1
${moduleList["AB"]}
oder dasselbe ohne Anführungszeichen nimmt den Wert einer Variable namens AB
und verwendet diesen als Index. Wenn diese Variable nicht gesetzt ist, ist der Wert, den Sie erhalten, Null, und dieser wird zu erweitert AB
, dem nullten Element des Arrays. Das ist ein nicht leerer String, also wahr.
Aber beide Bedingungen sind erfüllt, da in jedem Wort „AB“ vorkommt.
Dies ist ganz einfach nicht der Grund. Sie würden dasselbe mit ${moduleList["x"]}
oder was auch immer erhalten. Oder, wenn die benannte VariableIstauf eine Zahl gesetzt, erhalten Sie das entsprechende Element im Array:
$ moduleList=(AB, ABCdef, ABCd)
$ unset x
$ echo "${moduleList[x]}"
AB,
$ x=2
$ echo ${moduleList["x"]}
ABCd
Sie müssen das Array durchlaufen, um zu ermitteln, ob eine passende Zeichenfolge vorhanden ist, oder es in ein assoziatives Array ändern und die Zeichenfolgen als Schlüssel verwenden.
Beachten Sie auch, dass Sie die Kommas wahrscheinlich nicht in der Zuweisung möchten, Sie erhalten wörtliche Kommas in den Werten, wie oben zu sehen.