首页 > 解决方案 > AWK 不同的顺序导致完全不同的行为

问题描述

为什么允许这样做:

awk 'BEGIN  {print "emp", temp = 1}'

虽然这是不允许的:

awk 'BEGIN  {temp = 1, print "emp"}'

标签: awk

解决方案


在 C/C++ 中,根据上下文,a,可以是:

  1. 一个序列点运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)或
  2. 用于列出函数参数等项目的分隔符。

在 awk 中,the,只是一个分隔符,所以当您在 C 中编写这样的代码时(如果print "emp"是合法的 C):

print "emp", temp = 1

这可能意味着这,是一个序列点,因此可能意味着“print使用参数调用"emp"然后执行temp = 1”它绝不意味着在 awk 中。

在 awk 中,由于print接受以逗号分隔的参数列表,因此它始终意味着“print使用第一个参数"emp"和第二个参数调用”的结果temp = 1(即1分配给 的值temp)。

所以当你写:

temp = 1, print "emp"

这只是一个语法错误,因为赋值不会在右侧使用逗号分隔的列表,并且print不会返回可以存储在变量中的值,因此您不能说“temp使用第一个参数1和第二个参数赋值论证做的结果print "emp"


推荐阅读