それぞれ数行のテキストを持つファイルへのパスの配列があります。次のように処理された各ファイルの最初の行が入力された配列を作成したいと思います。
# 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
せいぜい、配列で取得した値は1つだけです。 forループから探している配列を取得できないようです。私は多くのバリエーションを試しましたが、どこが間違っているのかを理解するのに苦労しました。
Bashでは、行を直接配列に読み込むこともできます。現在の配列の長さを選択した場合${#lines[@]}
を挿入インデックスとして追加できます。
for i in "${paths[@]}"; do
mapfile -t -n 1 -O ${#lines[@]} lines < "$i"
done
mapfile mapfile [-n count] [-O Origin] [-t] [array]
標準入力からインデックス付き配列変数array […]に行を読み込みます。オプションが指定されている場合、次の意味があります。
-n
:最大count行をコピーします。 countが0の場合、すべての行がコピーされます。
-O
:インデックスOriginでarrayへの割り当てを開始します。デフォルトのインデックスは0です。
-t
:読み取られた各行から末尾の改行を削除します。