ksh не оценивает переменную в пределах backticks
-
25-09-2019 - |
Вопрос
Этот у кого я ошеломлен.
#!/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
Не связан с StackOverflow