bash here-stringが末尾の改行を追加するのはなぜですか?

bash here-stringが末尾の改行を追加するのはなぜですか?

次の例は、改行が追加されていることを示しています。ここにある文字列
なぜこのようなことをするのですか?

xxd -p <<<'a'  
# output: 610a

xxd -p <<<'a
'
# output: 610a0a

ベストアンサー1

簡単な答えは、それがkshが書かれる方法だからです(そしてbashは互換性があります)。しかし、このようにデザインを選択するには理由があります。

ほとんどのコマンドにはテキスト入力が必要です。 Unixの世界ではテキストファイルは一連の行で構成され、各行は改行文字で終わります。。したがって、ほとんどの場合、最後の改行が必要です。特に一般的なケースは、コマンドの出力を取得して何らかの方法で処理し、コマンドの置き換えを介して他のコマンドに渡すことです。コマンド置換は最後の改行文字を削除して<<<再挿入します。

tmp=$(foo)
tmp=${tmp//hello/world}
tmp=${tmp#prefix}
bar <<<$tmp

Bashとkshはとにかくバイナリデータを扱うことができないので(ヌル文字を処理できません)、彼らの機能がテキストデータに合わせられていることは驚くべきことではありません。

とにかく、here-string構文はhere-documentsと<<<同様に、主に便宜のためのものです。<<最後の改行を追加する必要がない場合はecho -n(bashで)またはprintfパイプを使用してください。

おすすめ記事