为什么awk打印整行而不是第一个字段?

Rob*_*tin 16 shell awk

我正在努力学习使用,awk但它的表现并不像我期望的那样.这是我的麻烦:

$ echo "Hello brave new world" | awk "{print $1}"
Hello brave new world
Run Code Online (Sandbox Code Playgroud)

我希望看到"你好",因为这是第一个字段.为什么空格不算作字段分隔符?

rua*_*akh 26

这是因为Bash解释$1为引用第一个shell参数,因此它将其替换为其值.因为,在您的情况下,该参数未设置,$1只是替换为空字符串; 所以你的AWK程序实际上只是{print }打印整行.

要阻止Bash执行此操作,请将AWK程序包装在单引号而不是双引号中:

echo "Hello brave new world" | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

要么

echo 'Hello brave new world' | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)


jim*_*ara 7

 echo "Hello brave new world" | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

在awk程序周围使用单引号,否则$ 1将被转换为shell变量$ 1