Der einfachste Weg, nach einem Index oder einem Schlüssel in einem Array zu suchen?
Mit:
set -o nounset
1) Mit einem indizierten array wie:
myArray=( "red" "black" "blue" )
Welches ist der kürzeste Weg, um zu überprüfen, wenn das element auf 1 gesetzt ist?
Manchmal benutze ich die folgenden:
test "${#myArray[@]}" -gt "1" && echo "1 exists" || echo "1 doesn't exist"
Ich würde gerne wissen, ob es eine bevorzugte.
2) Umgang mit nicht-konsekutive Indizes?
myArray=()
myArray[12]="red"
myArray[51]="black"
myArray[129]="blue"
Wie quick check, der '51' ist schon gesetzt, zum Beispiel?
3) Umgang mit assoziativen arrays?
declare -A myArray
myArray["key1"]="red"
myArray["key2"]="black"
myArray["key3"]="blue"
Wie quick check, 'key2' wird bereits verwendet, zum Beispiel?
Dank
BEARBEITET
Der einfachste Weg scheint mir:
if test "${myArray['key_or_index']+isset}"
then
echo "yes"
else
echo "no"
fi;
Dies funktioniert sowohl für indizierte und assoziative arrays. Keine Fehler angezeigt, die mit " set -o nounset.
Dank doubleDown für das headup.
InformationsquelleAutor der Frage Luca Borrione | 2012-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu überprüfen, ob das element gesetzt ist (gilt sowohl für indizierte und assoziative Arrays)
Im Grunde, was
${array[key]+abc}
tut, istarray[key]
festgelegt ist, zurückabc
array[key]
ist nicht festgelegt, nichts zurückReferenzen:
Sehen Parameter Expansion im Bash-manual und die kleine Notiz
Diese Antwort ist eigentlich angepasst, aus der die Antworten für diese Frage ALSO: Wie Sie feststellen, ob ein string definiert ist, nicht in einer bash-shell-Skript?
Wrapper-Funktion:
Beispielsweise
InformationsquelleAutor der Antwort doubleDown
Leider, bash geben, keine Möglichkeit, den Unterschied betwen leer und undefined variable.
Aber es gibt einige Möglichkeiten:
(geben keine Antwort)
Und für assoziatives array, du könntest das gleiche:
Könnten Sie den job tun, ohne die Notwendigkeit von externen tools (kein printf|grep als reinen bash), und warum nicht, bauen checkIfExist() als eine neue bash-Funktion:
oder sogar eine neue erstellen getIfExist bash-Funktion, die den gewünschten Wert ein und beenden Sie mit dem falschen Ergebnis-code, wenn gewünschte Wert nicht vorhanden:
InformationsquelleAutor der Antwort F. Hauri
getestet bash 4.3.39(1)-release
InformationsquelleAutor der Antwort gdoubleod
Aus man bash, bedingte Ausdrücke:
Beispiel:
Diese zeigen, dass beide foo[bar] und foo[baz] gesetzt sind (auch wenn letzteres eingestellt ist, auf einen leeren Wert) und foo[quux] nicht.
InformationsquelleAutor der Antwort Vineet
Schrieb ich eine Funktion, um zu überprüfen, ob ein Schlüssel in einem array existiert in der Bash:
Beispiel
Getestet mit GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
InformationsquelleAutor der Antwort Lucas Stad
Dies ist der einfachste Weg, fand ich für die Skripte.
<search>
ist die Zeichenfolge, die Sie wollen, zu finden,ASSOC_ARRAY
die Namen der Variablen halten Sie Ihr assoziatives array.Dependign auf, was Sie erreichen wollen:
Schlüssel vorhanden ist:
- Schlüssel existiert nicht:
Wert vorhanden ist:
Wert existiert nicht:
InformationsquelleAutor der Antwort sjas