2013-01-17 13 views
49

Sto provando a creare un dizionario di coppie di valori chiave usando lo script Bash. Sto cercando con questa logica:C'è un modo per creare coppie di valori-chiave nello script di Bash?

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

... dove $dictionary è una variabile, ma questo non sta funzionando.

C'è un modo per creare coppie di valori-chiave nello script Bash?

+0

In quale shell? – Johnsyweb

+0

stavo lavorando su bash. Ho immaginato un modo per farlo da solo. – RKS

+0

uso di questo anche aiutare: gli url + = (' key1 '$ value1' key2 '$ value2' key3 '$ valore3'' – RKS

risposta

96

Nella versione 4 sono stati introdotti array associativi.

declare -A arr 

arr["key1"]=val1 

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

L'array arr contiene ora le tre coppie di valori chiave. Bash è piuttosto limitata che cosa si può fare con loro, però, nessun ordinamento o popping ecc

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

Will ciclo su tutti i valori chiave e li eco fuori.

+4

+1. citare comunque i tasti: –

+8

È importante notare che Bash 4 non viene fornito con Mac OS X a causa della sua licenza GPLv3; alto. (Apple continua a spedire Bash 3.2.) – PleaseStand

+0

Fantastico, buono a sapersi questo ... :) – RKS

23

Se è possibile utilizzare un semplice delimitatore, molto semplice oneliner è questo:

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

Con la presente i è pieno di sequenze di caratteri come "a,b" e "c_s,d". ciascuno separato da spazi. Dopo il do usiamo parameter substitution per estrarre la parte prima della virgola , e la parte successiva.

+0

Puoi per favore spiegare l'esempio che hai dato? –

+0

Domanda: Funzionerà se 'b' è una variabile che contiene spazi? –

+0

nel mio esempio, b non è una variabile e no non funzionerà, poiché l'elenco per il ciclo è separato dallo spazio. – math

3

per persistente stoccaggio chiave/valore, è possibile utilizzare kv-bash, un'implementazione bash pura della base di dati chiave/valore disponibile presso https://github.com/damphat/kv-bash

Uso

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

Prova a creare alcune variabili permanenti

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) 
Problemi correlati