我试图sudo一个使用awk的命令,看起来awk在sh -c中的工作方式不同。
echo '1 2' | awk '{print $2}'
2
sh -c "echo '1 2' | awk '{print $2}'"
1 2
为什么发生这种情况?
您使用双引号,因此评估$2 。 内部单引号不再影响这一点。 如果$2为空,则基本上调用awk '{print }' 。 因此,您将整个input行作为输出。
$2
awk '{print }'
例如,你可以使用反斜线\$2转义\$2
\$2