奇怪的awk行为,打印$ 1但$ 0不是?

rus*_*inc 2 linux bash ubuntu awk

打印得很好 ls | xargs -I var sh -c 'echo var | awk "{print $1}"'

虽然这不是 ls | xargs -I var sh -c 'echo var | awk "{print $0}"'

显然这不是我的用例,只是为了重现问题.

因此,虽然0美元代表完整的生产线,但是在打印1美元时不打印0美元是很奇怪的.

参考OS - Ubuntu 14.04

anu*_*ava 6

当你使用:

ls | xargs -I var sh -c 'echo var | awk "{print $0}"'
Run Code Online (Sandbox Code Playgroud)

这有$0双引号因此$0被shell扩展,在这种情况下,它具有sh没有引号的值.awk将其视为变量并打印空白.

为了使它工作逃脱$:

ls | xargs -I var sh -c 'echo var | awk "{print \$0}"'
Run Code Online (Sandbox Code Playgroud)

为什么$1有效:

ls | xargs -I var sh -c 'echo var | awk "{print $1}"'
Run Code Online (Sandbox Code Playgroud)

$1也被shell扩展,它是空的.因此awk只执行一个print等于的空,print $0并在输出中获得文件名.

但是,在双引号中使用awk命令并且解析ls输出容易出错并不是一个好主意.