Zar*_*uta 1 linux arrays bash shell
我正在尝试使用Bash脚本将结构化文件的信息读入关联数组.该文件在每行中包含一个人的姓名及其地址,以"|"分隔.例如:
person1|address of person1
person2|address of person2
...
personN|address of personN
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面的脚本执行此操作.在WHILE循环中,正在打印信息.但是,在FOR循环中,不打印信息.似乎信息没有存储在WHILE循环之外的关联数组中.
我究竟做错了什么?为什么这不起作用?有更有效的方法吗?
#!/bin/bash
declare -A address
cat adresses.txt | while read line
do
name=`echo $line | cut -d '|' -f 1`
add=`echo $line | cut -d '|' -f 2`
address[$name]=$add
echo "$name - ${address[$name]}"
done
for name in ${!address[*]}
do
echo "$name - ${address[$name]}"
done
Run Code Online (Sandbox Code Playgroud)
错误和无用的使用 cut
#!/bin/bash
declare -A address
while IFS=\| read name add
do
address[$name]=$add
done < adresses.txt
for name in ${!address[*]}
do
echo "$name - ${address[$name]}"
done
Run Code Online (Sandbox Code Playgroud)
cat addresses.txt | while read line
do
...
done
Run Code Online (Sandbox Code Playgroud)
管道中的 shell 命令在子 shell 中执行。在子 shell 中设置的变量在父 shell 中不可见。
您可以通过使用重定向替换管道来解决此问题。
while read line
do
...
done < addresses.txt
Run Code Online (Sandbox Code Playgroud)