如何将文件中的行读入数组? [英] How to read lines from a file into an array?

查看:16
本文介绍了如何将文件中的行读入数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试以行数组的形式读入一个文件,然后使用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

您的代码中有一些奇怪的东西:

  1. 为什么每次都拆分LIST而不是使其成为数组变量?这是在浪费CPU时间。
  2. 为什么不使用for ITEM in ${(f)LIST}
  3. 可以直接向zsh询问数组长度:$#ARRAY。无需确定最后一个元素的最后一个匹配项的索引。
  4. POS获得与代码中的SIZE相同的值。因此它将只迭代一次。
  5. 方括号可能会出现问题,因为3.:(I)与模式匹配。请务必阅读文档。

这篇关于如何将文件中的行读入数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆