Вопрос

Этот у кого я ошеломлен.

#!/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 при оценке выражения (я получаю то же поведение, если я использую $ (...) вместо backticks).

Пока я мог бы сбросить витрин для временного файла - это должно было бы быть слишком жестко?

Любые идеи, как интерполировать переменную в пределах Backticks?

Это было полезно?

Решение

Одиночные цитаты вокруг '$AWKSCRIPT' предотвратить интерполяцию переменной. Двойные кавычки позволяют интерполяцию:

$ OUTPUT=`echo hello world | awk "$AWKSCRIPT"`
$ echo $OUTPUT
all done
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top