GNU/Linux >> Linux の 問題 >  >> Linux

シェルコマンド置換が末尾の改行文字を飲み込むのはなぜですか?

次の例のように、そして私の最近の質問のように bashで、末尾の改行文字はどこに行きましたか? 、「なぜ」起こるのか知りたい

  x="$(echo -ne "anbn")" ; 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!

フォーマットされた日付に表示される可能性のある二重スペースが壊れるのを防ぐために、引用符が必要であることに注意してください。


Linux
  1. 「sudo-i」ログインシェルがヒアドキュメントのコマンド文字列引数を壊すのはなぜですか?

  2. Ssh -tオプションがリダイレクト出力にCrとLfを追加するのはなぜですか?

  3. コマンドまたはシェルスクリプトの出力がStdoutまたはStderrであるかどうかを確認する方法は?

  1. Ls-lがLs-sとは異なるサイズを出力するのはなぜですか?

  2. 構文 |&はシェル言語で何を意味しますか?

  3. popen() がシェルを呼び出してプロセスを実行するのはなぜですか?

  1. 「&」を使用して Linux シェル コマンドを実行するのはなぜですか?

  2. Bash(Linux シェル)で Ctrl + V が貼り付けられないのはなぜですか?

  3. Linux のパイプ記号 |行う?