2013-01-17 15 views
49

Próbuję utworzyć słownik pary klucz wartości za pomocą skryptu Bash. Staram stosując tę ​​logikę:Czy istnieje sposób tworzenia par klucz-wartość w skrypcie Bash?

declare -d dictionary 
defaults write "$dictionary" key -string "$value" 

... gdzie $dictionary jest zmienna, ale to nie działa.

Czy istnieje sposób tworzenia par klucz-wartość w skrypcie Bash?

+0

W której powłoce? – Johnsyweb

+0

pracowałem nad bash. Pomyślałem, jak to zrobić sam. – RKS

+0

zastosowanie to pomoże również: URL + = (' klucz1 '$ value1' klucz2 '$ value2' Key3 '$ wartość3'' – RKS

Odpowiedz

96

W wersji bash wprowadzono 4 tablice asocjacyjne.

declare -A arr 

arr["key1"]=val1 

arr+=(["key2"]=val2 ["key3"]=val3) 

Tablica arr zawiera teraz trzy pary wartości klucza. Bash jest dość ograniczony, co można zrobić z nich jednak nie sortowania lub popping itp

for key in ${!arr[@]}; do 
    echo ${key} ${arr[${key}]} 
done 

Will pętla nad wszystkimi kluczowymi wartościami i echo ich.

+4

+1. cytuj jednak klucze: –

+8

Należy pamiętać, że Bash 4 nie jest dostarczany z systemem Mac OS X ze względu na licencję GPLv3, musisz pobrać i zainstalować wywyższaj to. (Apple wciąż wysyła Bash 3.2.) – PleaseStand

+0

Niesamowite, dobrze o tym wiedzieć ... :) – RKS

23

Jeśli można użyć prostego ogranicznika, bardzo prosty oneliner to:

for i in a,b c_s,d ; do 
    KEY=${i%,*}; 
    VAL=${i#*,}; 
    echo $KEY" XX "$VAL; 
done 

Niniejszym i jest wypełniona sekwencje znaków takich jak "a,b" i "c_s,d". każdy oddzielony spacjami. Po do używamy parameter substitution do wyodrębnienia części przed przecinkiem , i części po niej.

+0

Czy możesz wyjaśnić podany przykład? –

+0

Pytanie: Czy to zadziała, jeśli "b" jest zmienną zawierającą spacje? –

+0

w moim przykładzie, b nie jest zmienną i nie zadziała, ponieważ lista dla pętli for jest oddzielona spacją. – math

3

Dla pamięci trwałej klucz/wartość, można wykorzystać kv-bash, czysty realizację bash bazy danych klucz/wartość dostępnego w https://github.com/damphat/kv-bash

Wykorzystanie

git clone https://github.com/damphat/kv-bash 
source kv-bash/kv-bash 

Spróbuj utworzyć kilka zmiennych stałych

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) 
Powiązane problemy