Ich versuche, ein Wörterbuch mit Schlüsselwertpaaren mithilfe des Bash-Skripts zu erstellen. Ich versuche diese Logik zu verwenden:
declare -d dictionary
defaults write "$dictionary" key -string "$value"
... wo $dictionary
ist eine Variable, aber das funktioniert nicht.
Gibt es eine Möglichkeit, Schlüssel-Wert-Paare im Bash-Skript zu erstellen?
Antworten:
In Bash Version 4 wurden assoziative Arrays eingeführt.
declare -A arr arr["key1"]=val1 arr+=( ["key2"]=val2 ["key3"]=val3 )
Das arr-Array enthält jetzt die drei Schlüsselwertpaare. Bash ist ziemlich begrenzt, was Sie mit ihnen machen können, kein Sortieren oder Knallen usw.
for key in ${!arr[@]}; do echo ${key} ${arr[${key}]} done
Durchläuft alle Schlüsselwerte und gibt sie wieder.
Hinweis: Bash 4 wird aufgrund seiner GPLv3-Lizenz nicht mit Mac OS X geliefert. Sie müssen es herunterladen und installieren. Mehr dazu hier
quelle
Wenn Sie ein einfaches Trennzeichen verwenden können, ist dies ein sehr einfacher Oneliner:
for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
Hiermit
i
wird mit Zeichenfolgen wie"a,b"
und gefüllt"c_s,d"
. jeweils durch Leerzeichen getrennt. Nach dem verwendendo
wir die Parametersubstitution , um das Teil vor dem Komma,
und das Teil danach zu extrahieren .quelle
b
eine Variable Leerzeichen enthält?Für die dauerhafte Speicherung von Schlüsseln / Werten können Sie
kv-bash
eine reine Bash-Implementierung der Schlüssel- / Wertedatenbank verwenden, die unter https://github.com/damphat/kv-bash verfügbar istVerwendung
git clone https://github.com/damphat/kv-bash source kv-bash/kv-bash
Versuchen Sie, einige permanente Variablen zu erstellen
kvset myName xyz kvset myEmail [email protected] #read the varible kvget myEmail #you can also use in another script with $(kvget keyname) echo $(kvget myEmail)
quelle
In Bash verwenden wir
declare -A name_of_dictonary_variable
damit Bash versteht, dass es sich um ein Wörterbuch handelt.
Zum Beispiel möchten Sie dann ein
sounds
Wörterbuch erstellen ,declare -A sounds sounds[dog]="Bark" sounds[wolf]="Howl"
wo
dog
undwolf
sind"keys"
undBark
undHowl
sind"values"
.Sie können auf alle Werte zugreifen mit:
echo ${sounds[@]}
ODERecho ${sounds[*]}
Sie können auf alle Schlüssel nur zugreifen, indem Sie:
echo ${!sounds[@]}
Und wenn Sie einen Wert für einen bestimmten Schlüssel wünschen, können Sie Folgendes verwenden:
${sounds[dog]}
Dies gibt Ihnen value (
Bark
) für key (Dog
).quelle