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


8

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

# 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循环中获取要查找的数组。我尝试了许多变体,并且很难弄清我要去哪里。

Answers:


11

你自找的

lines+=("$line")

+=WORD 是字符串串联(或加法)。阿化合物分配 +=(...)追加的值到阵列。

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


谢谢,现在很有意义,为什么在我的某些尝试中,结果看起来像是两行的混合。
dimmech

4

在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:最多复制计数行。如果count为0,将复制所有行。

  • -O:从索引原点开始分配给数组。默认索引为0。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.