Tout d'abord, excuses pour la question potentiellement en double. Je suis nouveau à bash scripting et je n'arrive même pas à trouver des mots-clés avec lesquels faire des recherches. Cela dit, j'ai essayé de simplifier la description du problème, autant que je peux:Awk, gsub, ampersands et expansion inattendue
J'ai un fichier texte (test.txt) qui ne contient que cette ligne:
REPLACE
j'ai couru la commande suivante qui est supposé remplacer le texte du fichier (par exemple REPLACE
) avec la valeur de la variable de code if (A & B)
.
code="if (A & B)" ; awk -v var="${code}" '{ gsub(/REPLACE/, var); print }' test.txt
sortie Expected Je me attends code
valeur de la variable à imprimer comme est:
if (A & B)
La production réelle en quelque sorte l'esperluette est copié dans 'REPLACE', qui est le paramètre gsub
regexp:
if (A REPLACE B)
Peut-être que j'ai besoin d'échapper à l'ampli ersand malheureusement, code
population variable est hors de mon contrôle, donc je ne peux pas manipuler sa valeur manuellement.
Pour votre information awk version est "GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.2)"
Merci!
'et' signifie « remplacer match complet "dans awg regexes, y compris gsub. Vous devez lui échapper: 'code =" if (A \\ & B) "' (oui, avec deux baclslashes, car le shell fait aussi son expansion) – grochmal