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.