
ファイルパス配列があり、各ファイルには数行のテキストがあります。次のように処理された各ファイルの最初の行で埋められた配列を作成したいと思います。
# 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ループで探している配列を取得できないようです。さまざまなバリエーションを試してみましたが、どこで間違っているのかを把握するのが困難です。
答え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
: 読み取った各行から末尾の改行を削除します。