shell脚本从数组中声明关联变量

问题描述 投票:0回答:1

我有用空格分隔的数组键值对,

array=Name:"John" ID:"3234" Designation:"Engineer" Age:"32" Phone:"+123 456 789"

现在我想将上面的数组转换为如下所示的关联变量,

declare -A newmap
newmap[Name]="John"
newmap[ID]="3234"
newmap[Designation]="Engineer"
newmap[Age]="32"
newmap[Phone]="+123 456 789"

echo ${newmap[Name]}
echo ${newmap[ID]}
echo ${newmap[Designation]}
echo ${newmap[Age]}
echo ${newmap[Phone]}

我可以使用文件获得给定密钥的值,

declare -A arr
while IFS='=' read -r k v; do
   arr[$k]=$v;
done < "file.txt"
echo "${arr[name]}"

但是我想使用数组而不是文件来实现相同的功能。

bash shell variables sh
1个回答
0
投票

如果您完全信任字符串数据,则需要将其转换为关联数组,然后使用此邪恶的eval

array='Name:"John" ID:"3234" Designation:"Engineer" Age:"32" Phone:"+123 456 789"'
eval declare -A newmap=( $(sed -E 's/" ([[:alpha:]])/" [\1/g; s/:"/]="/g' <<< "[$array") )

然后检查输出:

declare -p newmap

declare -A newmap=([ID]="3234" [Designation]="Engineer" [Age]="32" [Phone]="+123 456 789" [Name]="John" )
© www.soinside.com 2019 - 2024. All rights reserved.