O @artm mostrou uma técnica em que você aspas duplas e escape de vários caracteres. Aqui estão 3 outras técnicas
Saia da aspa simples para deixar a casca expandir a variável
usrpid=$(awk '$1 == "'"$USR"'" {print $2}' file)
Passa a variável shell para uma variável awk
usrpid=$(awk -v usr="$USR" '$1 == usr {print $2}' file)
Se a variável for exportada, use a matriz ENVIRON do awk
usrpid=$(awk '$1 == ENVIRON["USR"] {print $2}' file)
Esse último deve ser o preferido.
Na primeira abordagem como a do @ artm, o conteúdo da variável shell é embutido dentro do código awk
, de modo que se torna uma vulnerabilidade de injeção de comando se o conteúdo da variável não for rigidamente controlado (por exemplo, com USR='blah" || system("reboot") || "'
, que chamaria reboot
).
O segundo não introduz uma vulnerabilidade de injeção de comando, mas se $USR
contiver caracteres de barra invertida, a variável usr
awk
não conterá a mesma coisa que a variável $USR
shell como awk
expande C- como seqüências de escape de barra invertida lá.
Usar ENVIRON
não tem nenhum desses problemas.