Экранирующая одиночная кавычка пригодится здесь.Обратите внимание, что 047 - это восьмеричное значение для символа ASCII '
, а awk позволяет использовать \nnn
в строке для включения любого символа, использующего его восьмеричное значение.
$ cat 'foo bar.txt'
a b c
1 2 3
$ var="foo bar.txt"
$ echo "$var"
foo bar.txt
$ z=$(awk -v a="$var" 'BEGIN{print "cat \047" a "\047"}')
$ eval "$z"
a b c
1 2 3
Возможно, это немногоприятнее с printf
:
$ awk -v a="$var" 'BEGIN{ printf "cat \047%s\047\n", a }'
cat 'foo bar.txt'
Проблема заключается в том факте, что одинарная кавычка имеет особое значение для оболочки, поэтому неудивительно, что есть конфликт, когда одинарные кавычки также используются в вашемПрограмма awk, когда эта программа находится в командной строке.
Этого можно избежать, поместив программу awk в ее собственный файл:
$ cat a.awk
BEGIN { printf "cat '%s'\n", a }
$ awk -v a="$var" -f a.awk
cat 'foo bar.txt'