我正在尝试使用 Bash 脚本创建键值对字典。我正在尝试使用这个逻辑:
declare -d dictionary
defaults write "$dictionary" key -string "$value"
... where$dictionary
是一个变量,但这不起作用。
有没有办法在 Bash 脚本中创建键值对?
我正在尝试使用 Bash 脚本创建键值对字典。我正在尝试使用这个逻辑:
declare -d dictionary
defaults write "$dictionary" key -string "$value"
... where$dictionary
是一个变量,但这不起作用。
有没有办法在 Bash 脚本中创建键值对?
在 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
将遍历所有键值并将它们回显。
注意:由于其 GPLv3 许可证,Bash 4 不随 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
我们使用参数替换来提取逗号之前的,
部分和之后的部分。
在 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[@]}
或echo ${sounds[*]}
您只能使用以下方式访问所有密钥:echo ${!sounds[@]}
如果您想要特定键的任何值,您可以使用:
${sounds[dog]}
这将为您Bark
提供键 ( ) 的值 ( dog
)。
对于持久键/值存储,您可以使用https://github.com/damphat/kv-bashkv-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)
Using an example above this is what I did
#!/bin/sh
lookup_vht_index() {
for i in VHT20,0 VHT40,1 VHT80,2 VHT160,3 ; do
KEY=${i%,*};
VAL=${i#*,};
# echo $KEY" XX "$VAL;
[ "$1" = "$KEY" ] && echo $VAL
done
}
lookup_vht_name() {
for i in 0,VHT20 1,VHT40 2,VHT80 3,VHT160 ; do
KEY=${i%,*};
VAL=${i#*,};
# echo $KEY" XX "$VAL;
[ "$1" = "$KEY" ] && echo $VAL
done
}
echo "VHT20="$(lookup_vht_index "VHT20")
echo "2="$(lookup_vht_name 2)
sh
在不支持的旧 bash (或 in )中declare -A
,可以使用以下样式来模拟键/值
# key
env=staging
# values
image_dev=gcr.io/abc/dev
image_staging=gcr.io/abc/stage
image_production=gcr.io/abc/stable
img_var_name=image_$env
# active_image=${!var_name}
active_image=$(eval "echo \$$img_var_name")
echo $active_image