Ваша идея была правильной - позволить переменным оболочки, интерполируемым внутри awk
, может позволить внедрить вредоносный код.Как правильно указано, используйте синтаксис -v
, но ваша попытка не удалась, поскольку сопоставление с переменной не работает в форме /../
, используйте прямое ~
match
ip -o route | awk -v hwlink="$HWLINK" '$0 ~ hwlink && ! /default/ {print $1}'
Рекомендуемый способочистить ваши переменные, переданные в awk
, будет использовать массив ARGV
или ENVIRON
.Переменные, прошедшие этот путь, не подвергаются расширению, выполняемому оболочкой
value='foo\n\n'
awk 'BEGIN {var=ARGV[1]; delete ARGV[1]}' "$value"
Если вы напечатаете значение var
внутри awk
, это будут буквальные foo\n\n
и , а не многострочная строка, которая обычно происходит, когда оболочка ее расширяет.