ファイル全体をメモリに読み込みますか?

ファイル全体をメモリに読み込みますか?

このような外部コマンドを使わずにbashからファイル全体をメモリに読み込む方法はありますかcat

ファイルから出力を取得する構文(たとえば)を知っていますが、<(/bin/ls)今度はファイルをメモリ全体に読み込む必要があります。つまり、$A内容を保存する必要があります(null、EOFなどがある可能性があります)。

ベストアンサー1

Bashは変数のnullバイトをサポートしません。最初のヌルバイトまでファイルの先頭を含めfoo=$(cat file)ます。$fooコマンド置換はファイルから最後の改行も削除します。たとえば、ファイルが4バイト(anewline、newline、newline、newline)で構成されている場合、ファイルにはそのバイトのみが含まれているかのように、そのfooバイトのみが含まれます。a

最後の改行文字を保持するには、改行ではなく追加の文字を出力するようにコマンドをスケジュールしてから削除します。

foo=$(cat file; echo a)
foo=${foo%a}

これまで、これはすべてのBourne / POSIXスタイルのシェル(ash、ksh、bash ...)で動作します。 Bash ≥4.0には、ファイルを変数として読み取るより高速な方法があります。mapfile

mapfile <file foo

bash変数にヌルバイトを入れる方法はありません。これが必要な場合は、次のようないくつかのオプションがあります。

  • zshを使用してください。
  • パールを使用してください。
  • データを一時ファイルに保存します(データはすでにファイルにあるため、ここでは役に立たないようです)。
  • 入力をエンコードして再デコードします(例:base64と)base64 -d

おすすめ記事