我正在尝试使用Bash脚本创建键值对的字典。我正在尝试使用以下逻辑:
declare -d dictionary
defaults write "$dictionary" key -string "$value"
...哪里$dictionary
是变量,但这不起作用。
有没有一种方法可以在Bash脚本中创建键值对?
我正在尝试使用Bash脚本创建键值对的字典。我正在尝试使用以下逻辑:
declare -d dictionary
defaults write "$dictionary" key -string "$value"
...哪里$dictionary
是变量,但这不起作用。
有没有一种方法可以在Bash脚本中创建键值对?
Answers:
在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
将遍历所有键值并回显它们。
注意:由于Bash 4具有GPLv3许可证,因此它不随Mac OS X一起提供。您必须下载并安装它。有关更多信息,请参见此处
如果可以使用简单的定界符,则非常简单的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
我们使用参数替换来提取逗号之前,
的部分和之后的部分。
b
变量包含空格,是否可以使用?
对于持久的键/值存储,可以使用https://github.com/damphat/kv-bash上kv-bash
的键/值数据库的纯bash实现。
用法
git clone https://github.com/damphat/kv-bash
source kv-bash/kv-bash
尝试创建一些永久变量
kvset myName xyz
kvset myEmail xyz@example.com
#read the varible
kvget myEmail
#you can also use in another script with $(kvget keyname)
echo $(kvget myEmail)
在bash中,我们使用
declare -A name_of_dictonary_variable
以便Bash理解这是一本字典。
例如,您要创建sounds
字典,
declare -A sounds
sounds[dog]="Bark"
sounds[wolf]="Howl"
在dog
和wolf
在"keys"
,Bark
和Howl
在"values"
。
您可以通过访问所有的值:echo ${sounds[@]}
ORecho ${sounds[*]}
您只能使用以下方式访问所有键: echo ${!sounds[@]}
而且,如果您希望某个特定键具有任何值,则可以使用:
${sounds[dog]}
这会给您Bark
键(Dog
)的值()。