Was passiert wirklich mit Bash Backticks?

2639
Andrew Wood

Backticks in bash habe ich immer als "Ausführen der Ausgabe von 'some_command'" gedacht . Was passiert im Folgenden? Betrachten Sie ein Skript myscript.pl, das den folgenden Text druckt:

 export PS1 = "[STRING] $ PS1" 

Wenn ich die Ausgabe von cat file.txtin die Befehlszeile kopiere und ausführen, wird "[STRING]" vor meiner Eingabeaufforderung hinzugefügt.

Auf der anderen Seite 'myscript.pl'macht das Backticking meine Aufforderung "[STRING]. Was ist los?

1
Entschuldigung für die Formatierung - Ich konnte keine Backticks in einem Codeblock anzeigen lassen. Andrew Wood vor 13 Jahren 0

1 Antwort auf die Frage

3
grawity

bashnicht ausführen die Ausgabe eines Graviszeichen Befehl, ersetzt es nur. (Die Funktion wird schließlich als Befehlsersetzung bezeichnet .)

Wenn die Substitution nicht in doppelten Anführungszeichen ist, einzelne Wörter aufgespalten wird, um die Ausgabe des Befehls getan, aber Zitate und andere Sonderzeichen werden ignoriert; export PS1="[STRING] $PS1"wird einfach aufgeteilt $IFSin:

  • export
  • PS1="[STRING
  • $PS1"

Wenn Sie den Inhalt einer Datei ausführen möchten, geben Sie diese ein:

. ./datei.txt 

oder nicht POSIX:

Quelle ./datei.txt 

Wenn Sie möchten, dass das gesamte Standardparsing auf eine Substitution angewendet wird, z. B. eine Variable, können Sie eval "$commands"oder eval "$(foo)"oder verwendeneval "`foo`" . Aber seien Sie vorsichtig damit.

Lassen Sie mich meine Frage klären. Ich speichere eigentlich keine Befehle in einer Textdatei, aber ich dachte, das wäre ein guter Weg, um etwas über mein Problem zu erfahren. Ich habe ein Perl-Skript eingerichtet, um Umgebungsvariablen einzurichten. Um zu vermeiden, dass die aktuelle Umgebung verloren geht (nicht das richtige Wort - Aliasnamen, Funktionen, Shell-Variablen usw.), muss das Skript _changes_ in die Umgebung geschrieben werden, die der Benutzer hoffentlich mithilfe von Backticks anwenden kann Skript. Andrew Wood vor 13 Jahren 0
Allerdings sehe ich, dass Eval vor meinen Backticked-Ausdrucksfunktionen so platziert wird, wie ich es gerne hätte Andrew Wood vor 13 Jahren 0
@ajwood: Lassen Sie mich auf den letzten Absatz meiner Antwort hinweisen. (** Zitate nicht vergessen. ** Ansonsten bricht das Zeug.) grawity vor 13 Jahren 0