如何从多个文本源的第一行创建数组?

如何从多个文本源的第一行创建数组?

我有一个文件路径数组,每个文件都有几行文本。我想生成一个数组,其中填充每个处理文件的第一行,如下所示:

# this.txt first line is [Test this]
# another.txt first line is [Test another]
paths=(
  ./this/path/this.txt
  ./another/path/another.txt
)

for i in ${paths[@]}; do
  read -r line < $i
  lines+=$line
done

我最多只在数组中获得一个值。我似乎无法从 for 循环中获取我正在寻找的数组。我尝试了很多变化,但很难弄清楚我哪里出错了。

答案1

你自找的

lines+=("$line")

+=WORD 是字符串连接(或补充)。 A复合赋值 +=(...)将值追加到数组中。

您可能还想在此处引用所有变量扩展 -line如果该行可能包含空格,则肯定需要它,但您在其他地方也可能遇到问题。

答案2

在 Bash 中,您还可以直接将行读入数组。如果选择当前数组长度${#lines[@]}作为插入索引,则可以追加到它:

for i in "${paths[@]}"; do
    mapfile -t -n 1 -O ${#lines[@]} lines < "$i"
done

概要摘录

mapfile mapfile [-n count] [-O origin] [-t] [array]

将标准输入中的行读取到索引数组变量中大批[…]。选项(如果提供)具有以下含义:

  • -n: 最多复制数数线。如果数数为 0 时,所有行都被复制。

  • -O: 开始分配给大批在索引处起源。默认索引为 0。

  • -t:从读取的每行中删除尾随换行符。

相关内容