输出
/ ext4
/boot ext2
tank zfs
在每一行上,分隔符是一个空格。我需要一个关联数组,如:
"/" => "ext4", "/boot" => "ext2", "tank" => "zfs"
这是如何在bash中完成的?
答案 0 :(得分:15)
如果命令输出在文件file
中,则:
$ declare -A arr=(); while read -r a b; do arr["$a"]="$b"; done <file
或者,您可以直接从命令cmd
将数据读入数组,如下所示:
$ declare -A arr=(); while read -r a b; do arr["$a"]="$b"; done < <(cmd)
构造<(...)
是流程替换。它允许我们从命令读取就像我们从文件中读取一样。请注意,两个<
之间的空格是必不可少的。
您可以使用declare -p
验证数据是否已正确读取:
$ declare -p arr
declare -A arr='([tank]="zfs" [/]="ext4" [/boot]="ext2" )'