输出结果为
/ ext4
/boot ext2
tank zfs
每行的分隔符是空格。我需要一个类似于关联数组的数据结构:
"/" => "ext4", "/boot" => "ext2", "tank" => "zfs"
在bash中如何完成这个操作?
输出结果为
/ ext4
/boot ext2
tank zfs
每行的分隔符是空格。我需要一个类似于关联数组的数据结构:
"/" => "ext4", "/boot" => "ext2", "tank" => "zfs"
在bash中如何完成这个操作?
如果命令输出在文件 file
中,则:
$ declare -A arr=(); while read -r a b; do arr["$a"]="$b"; done <file
或者,您可以直接从命令cmd
读取数据并将其存储到数组中,如下所示:
Or, 您可以 直接 从 命令 cmd
读取数据 into 一个 数组 as follows:
$ 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" )'
arr[/]=bar
,其他任何带有/
的语句也不行。出现的错误是bash: /: syntax error: operand expected (error token is "/")
。加引号也没用。 - Wintermute