複数のテキストソースの最初の行から配列を作成するには?

複数のテキストソースの最初の行から配列を作成するには?

ファイルパス配列があり、各ファイルには数行のテキストがあります。次のように処理された各ファイルの最初の行で埋められた配列を作成したいと思います。

# 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

あなたはそれを要求しました

lines+=("$line")

+=WORD 文字列連結(または補足)。 ㅏ複合割り当て +=(...)配列に値を追加します。

ここからすべての変数拡張を引用することもできます。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: 読み取った各行から末尾の改行を削除します。

関連情報