Bashのマニュアルページには、組み込み機能について次のように記載されていますread
。
ファイルの終わりが発生しない限り、終了ステータスは0です。
-e
オプションを設定して次のコードを使用したので、最近これが私を悩ませました。
read -rd '' json <<EOF
{
"foo":"bar"
}
EOF
この場合、失敗したシャットダウンが必要な理由を理解できません。これはどのような状況で役に立ちますか?
ベストアンサー1
read
レコードを読み取り(デフォルトは減りますが、ksh93 / bash / zshは-d
zsh / bashを使用するときにNULも含む他の区切り文字を受け入れます)、レコード全体を読み取る限り成功を返します。
read
EOF が見つかったがまだレコード区切り文字に出会っていない場合は、ゼロ以外の値を返します。
これにより、次のことができます。
while IFS= read -r line; do
...
done < text-file
またはzsh / bashを使用してください
while IFS= read -rd '' nul_delimited_record; do
...
done < null-delimited-list
最後のレコードを読んだ後、ループは終了します。
以下を使用して、最後に完了した履歴以降にさらに多くの[ -n "$nul_delimited_record" ]
データがあることを確認できます。
お客様の場合はread
NUL 文字が含まれていないため、入力にレコードは含まれません。bash
この文書にはNULを含めることはできません。したがって、read
レコード全体が正常に読み取られなかったため、失敗します。json
EOF(IFS処理後)まで読み取った内容を変数に保存し続けます。
とにかくread
設定せずに使用することはほとんど意味がありません$IFS
。
詳細については、次を参照してください。「IFS=read-r-line」を理解する。