ksh没有在反引号中评估变量

时间:2010-11-17 14:09:45

标签: variables ksh interpolation backticks

这个让我难过。

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

输出

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

(我当时希望看到“输出=全部完成”)

在评估表达式时,解释器似乎没有替换AWKSCRIPT变量(如果我使用$(...)而不是反引号,我会得到相同的行为)。

虽然我可以将AWKSCRIPT转储到临时文件中 - 但这也必须是硬编码的?

如何在反引号内插入变量?

1 个答案:

答案 0 :(得分:2)

'$AWKSCRIPT'周围的单引号阻止了变量的插值。双引号允许插值:

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