bash 中的关联数组未在循环内存储值

Associative array in bash not storing values inside loop

这是我的 $a 输出:

[root@node1 ~]# echo "${a}"
/dev/vdc1 /gfs1
/dev/vdd1 /elastic
mfsmount /usr/local/flytxt

我必须将它们存储在关联数组中 fsmounts,第一列作为键,第二列作为值。
这是我的代码:

declare -A fsmounts
echo "$a" | while read i ; do key=$(echo "$i" | awk '{print }'); value=$(echo "$i" | awk '{print }');fsmounts[$key]=$value;  done;

但是当我尝试使用

在循环外打印时
[root@node1 ~]# echo ${fsmounts[/dev/vdb1]}

输出为空白。我认为关联数组 fsmounts 实际上并不存储值。请帮助我。

但我实际上可以在循环内回显 fsmounts[$key]。看到这个:

echo "$a" | while read i ; do key=$(echo "$i" | awk '{print }'); value=$(echo "$i" | awk '{print }');fsmounts[$key]=$value; echo ${fsmounts[$key]};  done;
/gfs1
/elastic
/usr/local/flytxt

与您的逻辑相关的迫在眉睫的问题是我在管道中的循环中设置了变量。为什么它们在循环终止后就消失了?或者,为什么我不能通过管道读取数据?

您根本不需要 awk 或任何第三方工具。只是 运行 它在一个带有 read 的循环中,并通过循环

通过标准输入输入字符串
declare -A fsmounts

while read -r key value; do
    fsmounts["$key"]="$value"
done <<<"$a"

现在使用键和值遍历数组

for key in "${!fsmounts[@]}"; do
    printf 'key=%s value=%s\n' "$key" "${fsmounts[$key]}"
done

更多关于如何使用关联数组的信息 - How can I use variable variables (indirect variables, pointers, references) or associative arrays?