Непосредственная проблема заключается в том, что кавычки не вкладываются - вы не можете вложить строку в одинарных кавычках (скрипт awk
) внутри строки в одинарных кавычках (определение псевдонима).Есть способы заставить это работать, но намного проще просто пропустить часть псевдонима полностью.Создание псевдонима, который определяет функцию, а затем немедленно выполняет ее, бессмысленно;просто определите функцию один раз, используйте ее как обычно.Например:
wombat() {
local color="$1" # cache the color
foo --color="$color" | grep -Eo "(v[1-9])" | \
awk -v color="$color" '{print "bar --version=" $1 " --color=" color}' | \
xargs -0 bash -c;
}
Обратите внимание, что я также внес несколько изменений в способ обработки имени цвета: я использовал имя переменной оболочки в нижнем регистре (есть несколько имен всех заглавных букв со специальным значением, поэтому используйтеимена в нижнем или смешанном регистре для ваших собственных вещей более безопасны), я сделал эту переменную оболочки local
и передал ее в awk
как переменную, а не пытался встраивать ее буквально в сценарий awk
.Наконец, в сценарии awk
я помещаю ссылки на $1
и переменную color
вне строк в кавычках, чтобы они были расширены до их значений, а не использовались буквально.
О,и я использовал стандартный синтаксис POSIX для определений функций, который использует ()
вместо ключевого слова function
, чтобы сигнализировать, что это определение функции.
Поскольку у меня на самом деле нет foo
или bar
программ, я на самом деле не проверял это.Но, насколько я понимаю, должен работать.