2013-01-17 41 views
49

我想創建一個使用Bash腳本的鍵值對的字典。我正在嘗試使用此邏輯:有沒有辦法在Bash腳本中創建鍵值對?

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

...其中$dictionary是一個變量,但這不起作用。

有沒有辦法在Bash腳本中創建鍵值對?

+0

在哪個shell? – Johnsyweb

+0

我正在bash上工作。想通過一種方法來做到這一點。 – RKS

+0

使用,這也有助於:網址+ =( ' key1的 '$值1'鍵2 '$值2' KEY3 '你自己也可以'' – RKS

回答

96

在bash版本4中引入了關聯數組。

declare -A arr 

arr["key1"]=val1 

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

arr數組現在包含三個鍵值對。 Bash是相當有限的,你可以與他們雖然做什麼,不排序或爆裂等

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

將循環在所有鍵值和回聲出來。

+4

+1。不需要引用鍵雖然 –

+8

重要的是要注意,由於其GPLv3許可證,Bash 4沒有隨Mac OS X一起提供;您必須下載和安裝高了吧。 (蘋果仍然運送Bash 3.2。) – PleaseStand

+0

真棒,很高興知道這個...... :) – RKS

23

如果你可以用一個簡單的分隔符,很簡單的oneliner是這樣的:

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

據此i充滿了像"a,b""c_s,d"字符序列。每個用空格分隔。在do之後,我們使用parameter substitution來提取逗號,之前的部分和其後的部分。

+0

你能解釋一下你給的例子嗎? –

+0

問題:如果'b'是一個包含空格的變量,它會起作用嗎? –

+0

在我的例子中,b不是一個變量,也不會工作,因爲for循環的列表是空格分隔的。 – math

3

對於持久鍵/值存儲,您可以使用kv-bash,純bash的執行鍵/值數據庫的可在https://github.com/damphat/kv-bash

使用

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

嘗試創建一些永久變量

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) 
相關問題