Pregunta

Éste me tiene confundido.

#!/bin/ksh

AWKSCRIPT='END { print "all done"; }'

OUTPUT=`echo hello world | awk '$AWKSCRIPT'`

RETVAL=$?

echo "running echo hello world | awk '$AWKSCRIPT'"
echo "Output = $OUTPUT"
echo "returned = $RETVAL"

La salida es

$ ./kshawk.ksh
Output = hello world
returned = 0

(que estaba esperando para ver "salida = todo hecho")

Parece que el intérprete no está sustituyendo la variable AWKSCRIPT la hora de evaluar la expresión (me da el mismo comportamiento si uso $ (...) en lugar de acentos abiertos).

Mientras que podía volcar AWKSCRIPT en un archivo temporal - esto tendría que ser demasiado hardcoded

Alguna idea de cómo interpolar una variable dentro de acentos abiertos?

¿Fue útil?

Solución

Las comillas simples '$AWKSCRIPT' prevenir la interpolación de la variable. Las comillas dobles sí permiten la interpolación:

$ OUTPUT=`echo hello world | awk "$AWKSCRIPT"`
$ echo $OUTPUT
all done
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top