1

我一直在为一个新概念而苦苦挣扎——bash 脚本中的关联数组。

这是我的代码的简化版本:

#!/bin/bash
declare -A MYID
MYID[hello]=world
tac /home/user/filename | while read -r line; do
  MYID[hello]=me
done
echo "${MYID[hello]}"
exit

这就是我认为它会做的事情:1)声明一个名为 MYID 的关联数组 2)在 MYID 中将值 world 分配给键 hello 3)逐行读取文件 /home/user/filename 4)每次读取一行将我分配给 MYID 数组中的键 hello 5) 打印出“me”并退出

它所做的是打印出“世界”而不是“我”。我究竟做错了什么?

4

1 回答 1

2

管道创建一个子外壳,因此您在 while 循环中所做的任何更改MYID都只存在于该子外壳中。试试这个:

while read -r line; do
    MYID[hello]=me
done < <(tac /home/user/filename)
于 2013-01-17T19:30:39.580 回答