【问题标题】:How to put each line of a file in an array [duplicate]如何将文件的每一行放入数组中[重复]
【发布时间】:2020-03-02 03:01:39
【问题描述】:

我的一个 bash 脚本有问题。

我有一个文件,其中逐行存储电子邮件地址列表,如下所示:

mail@adress1
mail@adress2

...

我想要做的实际上是将文件的每一行放入一个数组中,其中每个索引对应于正确顺序的一行。

【问题讨论】:

  • 你试过readarray/mapfile吗?
  • mapfile 是 GNU 扩展吗?
  • 好吧,mapfile 是 bash 内置命令,而 bash 是 GNU shell,所以...有点。
  • Mh.看起来我的 Bash 太旧了。
  • 如果您使用的是 Mac,请查看 Homebrew

标签: bash shell


【解决方案1】:

对我来说,mapfile 不可用,您也可以使用可能较旧的 Bash 版本执行此操作:

 set -f
 IFS=$'\n'                                                                                                                                             
 arr=($(<foo.txt))

【讨论】:

  • 您需要在此处添加set -f,这样您就不会因为未引用的内容而得到任何不需要的文件名扩展。
  • @glennjackman:哦,是的,很抱歉这个错误。
【解决方案2】:

将文件的行读入数组:

mapfile -t myArray < myFile

myArray=()
while IFS= read -r line || [[ "$line" ]] ; do
    myArray+=( "$line" )
done < myFile

要将一行的字段读入一个数组:使用read-a 和一个“herestring”&lt;&lt;&lt;

# suppose: line="foo,bar,baz"
IFS=, read -r -a fields <<< "$line"

【讨论】:

  • 谢谢,第一个解决方案对我有用,我不知道存在这样的工具,我被我的循环卡住了......我想知道我是否可以使用 mapfile 来填充一个包含以下列表的数组这次列中的单词(我不是在问您解决方案,这不公平,只要您可能再次使用 mapfile)。再次感谢
  • 您可以使用read -a将一行拆分为单词
  • 是的,我刚刚将其添加到答案中
猜你喜欢
  • 1970-01-01
  • 2021-02-03
  • 2018-01-03
  • 2019-07-08
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
相关资源
最近更新 更多