Question

Celui-ci m'a déconcerté.

#!/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 me attendais à 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 contre-apostrophes).

Alors que je pouvais vider SCRIPTAWK dans un fichier temporaire - ce devrait être hardcoded trop

Toutes les idées comment interpoler une variable dans les apostrophes inverses?

Était-ce utile?

La solution

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

$ OUTPUT=`echo hello world | awk "$AWKSCRIPT"`
$ echo $OUTPUT
all done
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top