ksh pas variable dans l'évaluation backticks
-
25-09-2019 - |
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?
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