我有一个文件路径数组,每个文件都有几行文本。我想生成一个数组,其中填充每个处理文件的第一行,如下所示:
# 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
答案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
:从读取的每行中删除尾随换行符。