Domanda

Questo mi ha sconcertato.

#!/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"

L'uscita è

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

(mi aspettavo di vedere "Uscita = tutto fatto")

Sembra che l'interprete non sta sostituendo la variabile AWKSCRIPT quando si valuta l'espressione (ottengo lo stesso comportamento se uso $ (...) invece di backticks).

Mentre ho potuto scaricare AWKSCRIPT in un file temporaneo -? Questo dovrebbe essere hardcoded troppo

Tutte le idee come ad interpolare una variabile all'interno di apici inversi?

È stato utile?

Soluzione

Le singole virgolette intorno '$AWKSCRIPT' prevenire l'interpolazione della variabile. doppi apici PERMETTONO interpolazione:

$ OUTPUT=`echo hello world | awk "$AWKSCRIPT"`
$ echo $OUTPUT
all done
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top