在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。
鸿蒙传说
TA贡献1865条经验 获得超7个赞
mapfile
和readarray
(它们是同义词)在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
有关:
慕仙森
TA贡献1827条经验 获得超8个赞
你也可以这样做:
oldIFS="$IFS"IFS=$'\n' arr=($(<file))IFS="$oldIFS"echo "${arr[1]}" # It will print `A Dog`.
注意:
文件名扩展仍然存在。例如,如果有一行文字*
,它将扩展到当前文件夹中的所有文件。因此,只有当您的文件没有这种情况时才使用它。
添加回答
举报
0/150
提交
取消