如何将文件中的行读入数组? [英] How to read lines from a file into an array?
本文介绍了如何将文件中的行读入数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试以行数组的形式读入一个文件,然后使用zsh迭代它。我得到的代码在大多数情况下都可以工作,除非输入文件包含某些字符(如方括号)。以下是其中的一小段:
#!/bin/zsh
LIST=$(cat /path/to/some/file.txt)
SIZE=${${(f)LIST}[(I)${${(f)LIST}[-1]}]}
POS=${${(f)LIST}[(I)${${(f)LIST}[-1]}]}
while [[ $POS -le $SIZE ]] ; do
ITEM=${${(f)LIST}[$POS]}
# Do stuff
((POS=POS+1))
done
我需要更改什么才能使其正常工作?
推荐答案
#!/bin/zsh
zmodload zsh/mapfile
FNAME=/path/to/some/file.txt
FLINES=( "${(f)mapfile[$FNAME]}" )
LIST="${mapfile[$FNAME]}" # Not required unless stuff uses it
integer POS=1 # Not required unless stuff uses it
integer SIZE=$#FLINES # Number of lines, not required unless stuff uses it
for ITEM in $FLINES
# Do stuff
(( POS++ ))
done
您的代码中有一些奇怪的东西:
- 为什么每次都拆分
LIST
而不是使其成为数组变量?这是在浪费CPU时间。 - 为什么不使用
for ITEM in ${(f)LIST}
? - 可以直接向zsh询问数组长度:
$#ARRAY
。无需确定最后一个元素的最后一个匹配项的索引。 POS
获得与代码中的SIZE
相同的值。因此它将只迭代一次。- 方括号可能会出现问题,因为3.:
(I)
与模式匹配。请务必阅读文档。
这篇关于如何将文件中的行读入数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文