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

dra*_*ack 10 bash

输出是

/     ext4
/boot ext2
tank  zfs
Run Code Online (Sandbox Code Playgroud)

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

"/" => "ext4", "/boot" => "ext2", "tank" => "zfs"
Run Code Online (Sandbox Code Playgroud)

怎么在bash中完成?

Joh*_*024 15

如果命令输出在文件中file,则:

$ declare -A arr=(); while read -r a b; do arr["$a"]="$b"; done <file
Run Code Online (Sandbox Code Playgroud)

或者,您可以将数据直接从命令读cmd入数组,如下所示:

$ declare -A arr=(); while read -r a b; do arr["$a"]="$b"; done < <(cmd)
Run Code Online (Sandbox Code Playgroud)

构造<(...)过程替换.它允许我们从命令读取就像我们从文件中读取一样.请注意,两者之间的空间<是必不可少的.

您可以使用以下命令验证数据是否已正确读取declare -p:

$ declare -p arr
declare -A arr='([tank]="zfs" [/]="ext4" [/boot]="ext2" )'
Run Code Online (Sandbox Code Playgroud)

  • 哇这只是让我大吃一惊,我绝对需要阅读数组. (3认同)