Arrays 在Bash中将文件读入关联数组
我正在尝试使用Bash脚本将结构化文件的信息读入关联数组。文件的每一行都包含一个人的姓名和地址,以“|”分隔。例如:Arrays 在Bash中将文件读入关联数组,arrays,linux,bash,shell,Arrays,Linux,Bash,Shell,我正在尝试使用Bash脚本将结构化文件的信息读入关联数组。文件的每一行都包含一个人的姓名和地址,以“|”分隔。例如: person1|address of person1 person2|address of person2 ... personN|address of personN 我试着用下面的脚本来做这件事。在WHILE循环中,正在打印信息。但是,在FOR循环中,没有打印信息。信息似乎没有存储在WHILE循环之外的关联数组中 我做错了什么?为什么这不起作用?有没有更有效的方法 #!/b
person1|address of person1
person2|address of person2
...
personN|address of personN
我试着用下面的脚本来做这件事。在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
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
#/bin/bash
申报地址
而IFS=\\读取名称添加
做
地址[$name]=$add
done错误和无用地使用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
#/bin/bash
申报地址
而IFS=\\读取名称添加
做
地址[$name]=$add
done
管道中的Shell命令在子Shell中执行。子shell中设置的变量在父shell中不可见
您可以通过使用重定向替换管道来修复此问题
while read line
do
...
done < addresses.txt
读取行时
做
...
done
管道中的Shell命令在子Shell中执行。子shell中设置的变量在父shell中不可见
您可以通过使用重定向替换管道来修复此问题
while read line
do
...
done < addresses.txt
读取行时
做
...
done
扩展已接受的答案以解决OP的评论:
#!/bin/bash
declare -A address
while IFS='|' read name add
do
address[$name]=$add
echo "$name - ${address[$name]}"
done < adresses.txt
for name in "${!address[@]}"
do
echo "$name - ${address[$name]}"
done
#/bin/bash
申报地址
当IFS=“|”读取名称添加时
做
地址[$name]=$add
回显“$name-${address[$name]}”
done
扩展已接受的答案以解决OP的评论:
#!/bin/bash
declare -A address
while IFS='|' read name add
do
address[$name]=$add
echo "$name - ${address[$name]}"
done < adresses.txt
for name in "${!address[@]}"
do
echo "$name - ${address[$name]}"
done
#/bin/bash
申报地址
当IFS=“|”读取名称添加时
做
地址[$name]=$add
回显“$name-${address[$name]}”
done
OP代码中的cut
只是效率低下,没有错<代码>猫
,然而,它既没用又错了。对不起。我在剧本中犯了一个错误。但我已经修复了原来的帖子。“切割”命令工作正常。我可以在WHILE循环中访问关联数组的信息。但是,我无法在FOR循环中访问它。OP代码中的cut
只是效率低下,没有错<代码>猫
,然而,它既没用又错了。对不起。我在剧本中犯了一个错误。但我已经修复了原来的帖子。“切割”命令工作正常。我可以在WHILE循环中访问关联数组的信息。但是,我无法在FOR循环中访问它。是的!这就是问题所在!然而,现在我有另一个问题。如果人名有空格,则FOR循环无法正常工作。是!这就是问题所在!然而,现在我有另一个问题。如果人名有空格,则FOR循环无法正常工作。的可能重复