1

这个让我难住了。

#!/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 转储到临时文件 - 这也必须进行硬编码?

任何想法如何在反引号中插入变量?

4

1 回答 1

2

周围的单引号'$AWKSCRIPT'防止变量的插值。双引号确实允许插值:

$ OUTPUT=`echo hello world | awk "$AWKSCRIPT"`
$ echo $OUTPUT
all done
于 2010-11-17T14:16:17.880 回答