I am trying to sudo a command that uses Awk, and it looks like awk works differently inside sh -c.

echo '1 2' | awk '{print $2}'

2

sh -c "echo '1 2' | awk '{print $2}'"

1 2

Why is this happening?

link|improve this question
feedback

1 Answer

up vote 3 down vote accepted

You use double quotes, therefore $2 is evaluated. The inner single quotes don't affect this anymore. If $2 is empty, you are basically calling awk '{print }'. Consequently, you get the whole input line as output.

You could for example escape the $ with a backslash: \$2

link|improve this answer
@Michael: You can see the behavior described by Maxi by using the -x option of the shell to show a trace: sh -xc "echo '1 2' | awk '{print $2}'" – Dennis Williamson Jun 29 '10 at 3:28
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.