39

Javaでは、ファイルが非常に小さいことがわかっている場合はreadBytes()、1行ずつ読み取ったり、バッファを使用したりする代わりに、メソッドを使用してコンテンツを一度に読み取ることができます。

シェルスクリプトで疑問に思っているだけですが、次のようなことができることはわかっています。

    while read line
    do
      echo $line
      LINE = $line
    done < "test.file"
    echo $LINE

test.fileが次のような場合:

testline1
testline2
testline3

これは私に最後の行を与えるだけです$LINE$LINE「testline3」が含まれています。

私の質問は次のとおりです。複数行のファイル全体を1つの変数に読み取るにはどうすればよい$LINE="testline1\ntestline2\ntestline3"ですか?

4

3 に答える 3

118

ループの後ではなく、ループ内の行を処理します。変数内のファイルが本当に必要な場合:

var=$(<file)
于 2012-06-11T17:04:51.987 に答える
13

もう1つの方法は、組み込みの素敵なmapfileを使用することです。

mapfile < test.file
echo "${MAPFILE[@]}"
于 2012-06-11T19:01:56.427 に答える
10

別のオプションとして、行の配列を作成できます。bash 4以降を実行している場合は、mapfile組み込みの機能を使用できます。

mapfile -t lines <test.file

行を出力および保存する場合は、次のようにすることができます。

mapfile -t lines < <(tee /dev/tty <test.file)

次に"${lines[0]}"、ファイルの最初の行"${lines[1]}"、2番目の行というようになります。${#lines[@]}行数になります。"${lines[@]}"配列全体になり、"${lines[*]}"スペースで1つの大きな文字列に結合された行になります。

古いバージョンのbashの場合、アレイを手動でビルドできます。

lines=()
while IFS= read -r line
do
  printf '%s\n' "$line"
  lines+=("$line")
done < test.file
于 2012-06-11T18:10:17.127 に答える