Wie kann ich Variablenersetzungen für einen Befehl in der Vorschau anzeigen?

Wie kann ich Variablenersetzungen für einen Befehl in der Vorschau anzeigen?
u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE

Ich möchte den resultierenden Befehl einfach (z. B. wenn möglich ohne Escape) drucken, anstatt ihn auszuführen.

Gibt es eine integrierte Funktion, um diese Art von Tests in Standard-Linux-Shells wie Bash durchzuführen?

Antwort1

Um den allgemeinen Fall abzudecken, müssen Sie Variablen in Anführungszeichen setzen und den Befehl als Array speichern:

$ USER='foo bar' DATABASE='baz ban'
$ command=(u2api --zuser="$USER" --outfmtput=json SQL create_database name="$DATABASE")
$ printf '%q ' "${command[@]}"; echo # To get a newline at the end
u2api --zuser=foo\ bar --outfmtput=json SQL create_database name=baz\ ban 

So führen Sie das Befehlsarray aus:

"${command[@]}"

echoDie Ausführung des Befehls funktioniert in einigen sehr einfachen Fällen:

echo u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE

Dies ist die einfachste Lösung, zeigt Ihnen aber nur dann die korrekte Ausgabe, wenn die Erweiterungen keine Sonderzeichen wie Leerzeichen (insbesondere Leerzeichen, Tabulatoren oder Zeilenumbrüche) oder Escape-Zeichen enthalten. Beispiel:

$ USER='foo bar'
$ echo u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE
u2api --zuser=foo bar --outfmtput=json SQL create_database name=

Beachten Sie die fehlenden Anführungszeichen um den Benutzernamen. Dasselbe Problem tritt bei allen nicht in Anführungszeichen gesetzten Variablen auf, die Leerzeichen enthalten.

verwandte Informationen