MYPATH
не будет заменяться оболочкой, так как строка использует одинарные кавычки.Рассмотрим следующее:
csh$ echo '{print substr($USER,3)}'
{print substr($USER,3)}
csh$ echo "{print substr($USER,3)}"
{print substr(dshawley,3)}
Использование одинарных кавычек указывает оболочке передавать строковый аргумент в программу как есть. Двойные кавычки говорят оболочке выполнить расширение переменной для аргумента перед передачей его в программу.Это базовая функция оболочки, распространенная среди оболочек и некоторых языков программирования (например, perl).
Следующая проблема, с которой вы столкнетесь, заключается в том, что awk
будет хотеть заключать в кавычки первый параметрsubstr
или анализ не удастся.В этом случае вы, вероятно, увидите предупреждение «Недопустимое имя переменной».Здесь я заблудился с csh
, так как не знаю, как правильно избежать двойных кавычек в строке в кавычках.В bash / sh / ksh вы должны сделать следующее:
sh$ awk "{print substr(\"$USER\",3)}"
input
^D
hawley
sh$
На случай, если вы этого еще не знаете, awk
потребуется поток ввода, прежде чем он что-то сделает.Для маленького примера мне пришлось набрать «input» и символ EOF.