Bashマニュアルのread
組み込みコマンドについて
-d delim
の最初の文字は、delim
改行文字ではなく入力行を終了するために使用されます。
(文字であるEOFと一致しない限り)、一致せずに常にファイル全体を一度に読み取るようにdelim
文字を指定できますか?read
read
ありがとうございます。
ベストアンサー1
bash
とにかく変数にNULバイトを格納できないため、いつでも次のことができます。
IFS= read -rd '' var < file
ファイルにNULバイトがない場合、最初のNULバイトまたはファイルの終わりまでファイルの内容を保存します(定義によるテキストファイル(少なくともPOSIX定義による)はNULバイトを含みません)。
別のオプションは、ファイルの内容を行配列(行区切り文字を含む)として保存することです。
readarray array < file
その後、次のことで参加できます。
IFS=; var="${array[*]}"
入力に NUL バイトが含まれていると、各行の最初の項目以降のすべての項目が失われます。
POSIX sh構文では、次のことができます。
var=$(cat < file; echo .); var=${var%.}
我々は、.
コマンド置換がすべての末尾の改行を削除するという事実を説明するために1つを追加してから削除しました。
ファイルにNULバイトが含まれている場合、動作は実装ごとに異なります。zsh
これを保持する唯一のシェルです(また、変数にNULバイトを格納できる唯一のシェルでもあります)。bash
一部の他のシェルはそれを削除し、他のシェルはそれをブロックし、最初のNULが発生した後にすべてを破棄します。
次のように、いくつかのエンコーディングでファイルの内容を保存することもできます。
var=$(uuencode -m - < file)
次の方法で再インポートします。
printf '%s\n' "$var" | uudecode
または、パラメータで使用\0000
できるようにNULでエンコードします(文字セットBIG5、GB18030、GBK、BIG5-HKCSCのロケールを使用しないと仮定)。printf %b
bash
var=; while true; do
if IFS= read -rd '' rec; then
var+=${rec//\\/\\\\}\\0000
else
var+=${rec//\\/\\\\}
break
fi
done < file
それから:
printf %b "$var"
再インポート。