为了账号安全,请及时绑定邮箱和手机立即绑定

在Bash中从文本文件创建数组

在Bash中从文本文件创建数组

在Bash中从文本文件创建数组脚本获取URL,解析所需的字段,并将其输出重定向以保存在文件file.txt中。每次找到字段时,输出都会保存在新行中。file.txt的A CatA DogA Mouse etc...我想file.txt在一个新脚本中从中创建一个数组,其中每一行都是数组中自己的字符串变量。到目前为止,我尝试过:#!/bin/bashfilename=file.txt declare -a myArray myArray=(`cat "$filename"`)for (( i = 0 ; i < 9 ; i++))do   echo "Element [$i]: ${myArray[$i]}"done当我运行这个脚本时,空格导致单词被分割而不是获取期望的输出Element [0]: A Cat Element [1]: A Dog etc...我最终得到这个:实际输出Element [0]: A  Element [1]: Cat Element [2]: AElement [3]: Dog etc...如何调整下面的循环,使每行上的整个字符串与数组中的每个变量一一对应?
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

使用mapfile命令:

mapfile -t myArray < file.txt

错误正在使用for- 循环文件的惯用方法是:

while IFS= read -r line; do echo ">>$line<<"; done < file.txt

有关详细信息,请参阅BashFAQ / 005


查看完整回答
反对 回复 2019-08-09
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

mapfilereadarray(它们是同义词)在Bash版本4及更高版本中可用。如果您有旧版本的Bash,则可以使用循环将文件读入数组:

arr=()while IFS= read -r line; do
  arr+=("$line")done < file

如果文件的最后一行有不完整(缺少换行符),您可以使用此替代方法:

arr=()while IFS= read -r line || [[ "$line" ]]  do
  arr+=("$line")done < file

有关:


查看完整回答
反对 回复 2019-08-09
?
慕仙森

TA贡献1827条经验 获得超7个赞

你也可以这样做:

oldIFS="$IFS"IFS=$'\n' arr=($(<file))IFS="$oldIFS"echo "${arr[1]}" # It will print `A Dog`.

注意:

文件名扩展仍然存在。例如,如果有一行文字*,它将扩展到当前文件夹中的所有文件。因此,只有当您的文件没有这种情况时才使用它。


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 674 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信