2010-11-17 2 views
1

У меня есть я в тупике.ksh не оценивая переменную в 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 

(я ожидал увидеть "Output = все сделано")

Похоже, что интерпретатор не заменяя переменную AWKSCRIPT при оценке выражения (Я получаю такое же поведение, если вместо backticks я использую $ (...).

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

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

ответ

2

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

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

Спасибо msw - да, это исправлено – symcbean

Смежные вопросы