awk - AWK 不同的顺序导致完全不同的行为
问题描述
为什么允许这样做:
awk 'BEGIN {print "emp", temp = 1}'
虽然这是不允许的:
awk 'BEGIN {temp = 1, print "emp"}'
解决方案
在 C/C++ 中,根据上下文,a,
可以是:
- 一个序列点运算符,它计算其第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)或
- 用于列出函数参数等项目的分隔符。
在 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"
。
推荐阅读
- c++ - Cpp,强制执行预处理器评估顺序
- sql - 如何使用数据工厂从表缓存中删除数据?
- python - 为什么我会在 'where 子句' 中得到“未知列 'Jacob'”?
- go - Golang 中的 UDP 代理
- javascript - 如何在追加语句中运行 if 语句
- azure-devops - 在 Azure DevOps Git Repo 中采购标记的 terraform 模块
- entity-framework - EF Core:必须是可简化节点
- javascript - 无法在javascript中执行函数
- c# - 剃刀页面没有调用正确的控制器方法
- java - 无法从同一 .java 文件中包含的静态扩展类访问字段