Zuerst, Entschuldigung für die potenziell doppelte Frage. Ich bin neu im Bash-Scripting und kann nicht einmal ein paar Schlüsselwörter herausfinden. Mit dieser sagte, habe ich versucht, die Problembeschreibung zu vereinfachen, so viel wie ich kann:Awk, Gsub, Et-Zeichen und unerwartete Erweiterung
ich eine Textdatei (test.txt), die nur diese Zeile enthält:
REPLACE
ich den folgenden Befehl lief das ist soll den Text der Datei ersetzen (zB REPLACE
) mit Code-Variablenwert if (A & B)
.
code="if (A & B)" ; awk -v var="${code}" '{ gsub(/REPLACE/, var); print }' test.txt
Erwarteter Ausgang I erwarten code
Variablenwert gedruckt werden wie:
if (A & B)
Actual Ausgang irgendwie das Und-Zeichen in 'ersetzen' erweitert wird, was gsub
regexp Parameter ist:
if (A REPLACE B)
Vielleicht muss ich den Amp entkommen ersand aber leider code
Variable Population ist außerhalb meiner Kontrolle, so kann ich seinen Wert nicht manuell manipulieren.
FYI awk-Version ist "GNU Awk 4.1.4, API: 1.1 (Mpfr 3.1.5, GNU MP 6.1.2)"
Dank!
'&' bedeutet „Ersatz full match "in awk regexes, einschließlich gsub. Sie müssen es entkommen: 'code =" if (A \\ & B) "' (ja, mit zwei baclslashes, weil die Shell auch ihre Erweiterung tut) – grochmal