シェルコマンドの置き換えが末尾の改行を食べるのはなぜですか?

シェルコマンドの置き換えが末尾の改行を食べるのはなぜですか?

以下の例に従い、私の最近の質問 末尾の改行文字はbashからどこに移動しますか?、「なぜ」これが起こるのか知りたいです。

  x="$(echo -ne "a\nb\n")" ; echo -n "$x" | xxd -p 
# Output is: 610a62 
# The trailing newline from the 'echo' command
#   has been "deleted" by Command Substitution

私の考えには確かに少しあると思います。非常にシェル操作(コマンドの置換など)の重要な理由は、実際に代替コマンドの出力から一部のデータを削除することです。
しかし、この質問はその逆のようで、理解できません。しなければならないしないでください。コマンドの出力をスクリプトプロセスに戻す...文字を予約するのは奇妙に見えますが、ここには妥当な理由があると思います...その理由は何か知りたいです...

ベストアンサー1

シェルはもともと完全なプログラミング言語では意図されていなかったからです。

\nいくつかのコマンド出力から末尾を削除することは非常に困難です。ただし、表示の目的でほとんどすべてのコマンドは出力で終わるため、\n他のコマンドで使用したい場合は簡単に削除する方法が必要です。建設とともに自動解体が$()選択されたソリューションでした。

もしそうなら、おそらくあなたはこの質問を答えとして受け入れるでしょう。

\n次のコマンドでこれが自動的に実行されない場合は、末尾を削除する簡単な方法を見つけることができますか?

> echo The current date is "$(date)", have a good day!

二重スペースがフォーマットされた日付を破るのを防ぐには、引用符が必要です。

おすすめ記事