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

Akh*_*air 4 bash associative-array bash4

这是我的$a输出:

[root@node1 ~]# echo "${a}"
/dev/vdc1 /gfs1
/dev/vdd1 /elastic
mfsmount /usr/local/flytxt
Run Code Online (Sandbox Code Playgroud)

我必须将这些存储在关联数组中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;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在循环外打印时

[root@node1 ~]# echo ${fsmounts[/dev/vdb1]}
Run Code Online (Sandbox Code Playgroud)

空白是输出。我认为关联数组 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
Run Code Online (Sandbox Code Playgroud)

Ini*_*ian 5

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

awk为此,您根本不需要或任何第三方工具。只需在循环中运行它read并通过循环中的标准输入提供字符串

declare -A fsmounts

while read -r key value; do
    fsmounts["$key"]="$value"
done <<<"$a"
Run Code Online (Sandbox Code Playgroud)

现在用键和值循环遍历数组

for key in "${!fsmounts[@]}"; do
    printf 'key=%s value=%s\n' "$key" "${fsmounts[$key]}"
done
Run Code Online (Sandbox Code Playgroud)

有关如何使用关联数组的更多信息 -如何使用变量变量(间接变量、指针、引用)或关联数组?


归档时间:

查看次数:

1228 次

最近记录:

6 年,10 月 前