次の例は、改行が追加されていることを示しています。ここにある文字列。
なぜこのようなことをするのですか?
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
パイプを使用してください。