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

标签 bash associative-array bash4

<分区>

这是我的$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 $1}'); value=$(echo "$i" | awk '{print $2}');fsmounts[$key]=$value;  done;

但是当我尝试使用

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

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

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

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

最佳答案

与您的逻辑相关的迫在眉睫的问题是 I set variables in a loop that's in a pipeline. Why do they disappear after the loop terminates? Or, why can't I pipe data to read?

为此,您根本不需要 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?

关于bash - bash中的关联数组不在循环内存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54567268/

相关文章:

linux - Shell 命令在目录模式中查找文件

linux - 如何停止创建特定数量的文件?

C#相当于php关联数组

javascript - JavaScript 中相同类型和值的两个字符串在与关联数组匹配时不会计算为 true

rust - 在 Rust 中创建关联数组

arrays - 在 Bash 中获取关联数组( double )部分的长度

regex - 使用 SED 从 shellscript 中的字符串中剥离前 X 个字符,现在存储为变量?

linux - 使用 bash 合并目录和加入内部文件

linux - 将逗号分隔的数字模式匹配为字符串

bash - Ansible:强制管道失败