ksh non valutare variabile all'interno backticks
-
25-09-2019 - |
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?
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