GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum verschlingt die Shell-Befehlsersetzung ein nachgestelltes Newline-Zeichen?

Wie im folgenden Beispiel und wie in meiner letzten Frage In Bash, wo ist das abschließende Zeilenumbruchzeichen geblieben? , ich möchte wissen, „warum“ es passiert

  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

Ich nehme an, es muss einige sehr geben ein wichtiger Grund für eine Shell-Aktion, nämlich Befehlsersetzung, um tatsächlich einige Daten aus der Befehlsausgabe zu löschen, die sie ersetzt …
aber ich kann mich nicht damit auseinandersetzen, da es das Gegenteil von dem zu sein scheint, was es ist wird angenommen zu tun.. dh. um die Ausgabe eines Befehls zurück in den Skriptprozess zu übergeben … Ein Zeichen zurückzuhalten erscheint mir seltsam, aber ich nehme an, es gibt einen vernünftigen Grund dafür … Ich bin gespannt, was dieser Grund ist …

Akzeptierte Antwort:

Weil die Shell ursprünglich nicht als vollständige Programmiersprache gedacht war.

Es ist ziemlich schwierig, ein nachgestelltes n zu entfernen aus einigen Befehlsausgaben.
Aus Anzeigegründen beenden jedoch fast alle Befehle ihre Ausgabe mit n , also … es muss eine einfache Möglichkeit geben, es zu entfernen, wenn Sie es in einem anderen Befehl verwenden möchten. Automatische Entfernung mit $() Konstruktion war die gewählte Lösung.

Vielleicht akzeptieren Sie diese Frage als Antwort:

Können Sie einen einfachen Weg finden, das nachgestellte n zu entfernen wenn dies im folgenden Befehl nicht automatisch gemacht wurde?

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

Beachten Sie, dass Anführungszeichen erforderlich sind, um doppelte Leerzeichen zu vermeiden, die in formatierten Datumsangaben vorkommen können.


Linux
  1. Was ist der Unterschied zwischen dem Abrufen der Befehlsausgabe mit "command" und $(command) in der Shell??

  2. Warum fügt die Ssh -t Option Cr &Lf in der umgeleiteten Ausgabe hinzu?

  3. Wie kann man feststellen, ob die Ausgabe eines Befehls oder Shell-Skripts Stdout oder Stderr ist?

  4. Warum gibt Ls -l eine andere Größe als Ls -s aus?

  5. Warum wird diese Shell-Pipeline beendet?

So leiten Sie die Shell-Befehlsausgabe um

Warum unterbricht eine „sudo -i“-Login-Shell ein Here-doc-Befehlszeichenfolge-Argument?

Warum ruft popen() eine Shell auf, um einen Prozess auszuführen?

Warum einen Linux-Shell-Befehl mit '&' ausführen?

Warum gibt slabtop -o nur die ersten 23 Zeilen zurück, wenn der Befehl weitergeleitet wird?

Die Ausgabe eines Shell-Befehls nur bei Erfolg ausblenden?