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 に答える