将命令的输出拆分为bash中的关联数组

时间:2015-05-30 01:08:58

标签: bash

输出

/     ext4
/boot ext2
tank  zfs

在每一行上,分隔符是一个空格。我需要一个关联数组,如:

"/" => "ext4", "/boot" => "ext2", "tank" => "zfs"

这是如何在bash中完成的?

1 个答案:

答案 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" )'