2010-11-17 30 views
1

Celui-ci m'a bloqué.ksh n'évaluant pas la variable dans les guillemets

#!/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 sortie est

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

(je comptais voir "Sortie = all done")

On dirait que l'interprète est substituait pas la variable SCRIPTAWK lors de l'évaluation de l'expression (Je reçois le même comportement si j'utilise $ (...) au lieu de backticks).

Alors que je pourrais vider AWKSCRIPT dans un fichier temporaire - cela devrait être codé en dur aussi?

Des idées pour interpoler une variable dans les backticks?

Répondre

2

Les guillemets autour de '$AWKSCRIPT' empêchent l'interpolation de la variable. Les guillemets permettent l'interpolation:

$ OUTPUT=`echo hello world | awk "$AWKSCRIPT"` 
$ echo $OUTPUT 
all done 
+0

Merci msw - oui c'est corrigé – symcbean