当前位置: 首页 > news >正文

第5.8节:awk自增自减运算

1 第5.8节:awk自增自减运算

  自增和自减运算符可使变量的值增加或减少 1。赋值运算符也能实现相同操作,所以自增运算符并未为 awk 语言增添新功能;不过,它们是极为常见操作的便捷缩写形式。

  用于加 1 的运算符写作 ++ 。它可在获取变量值之前之后对变量进行自增。要对变量 v 进行前置自增,写作 ++v 。这会把 v 的值加 1 —— 这个新值同时也是该表达式的值。(赋值表达式 v += 1 与之完全等价 。)把 ++ 写在变量之后,则表示后置自增。这同样会使变量值自增;区别在于,自增表达式本身的值是变量的旧值。因此,若 foo 的值为 4,表达式 foo++ 的值为 4,但会把 foo 的值改为 5 。换句话说,该运算符返回变量的旧值,但会产生使变量自增的副作用。

  后置自增 foo++ 几乎等同于编写 (foo += 1) - 1 。但二者并非完全等价,因为 awk 中的所有数字都是浮点数 —— 在浮点运算里,foo + 1 - 1 不一定等于 foo 。不过,只要处理的是相当小的数字(小于 (10^{12}) ),差异就微乎其微。

字段和数组元素的自增方式与变量类似。(若想同时进行字段引用和变量自增,可使用 $(i++) 。由于字段引用运算符 $ 的优先级,括号是必需的 。)

自减运算符 -- 的工作方式与 ++ 类似,只是它做的是减 1 操作而非加 1 。和 ++ 一样,它可在左值(lvalue )之前使用实现前置自减,或在左值之后使用实现后置自减。以下是自增和自减表达式的总结:

  • ++lvalue:将 lvalue 自增,返回新值作为表达式的值。
  • lvalue++:将 lvalue 自增,返回 lvalue 的旧值作为表达式的值。
  • --lvalue:将 lvalue 自减,返回新值作为表达式的值。(此表达式类似 ++lvalue,但不是加,而是减 。)
  • lvalue--:将 lvalue 自减,返回 lvalue 的旧值作为表达式的值。(此表达式类似 lvalue++,但不是加,而是减 。)

1.1 运算符求值顺序

如果你不清楚所写的表达式是否会存在歧义时,最好别那样写,使用更简单更易读的方式来书写,哪怕这样会看起来很low。

像下面这样的代码会发生什么情况呢?

b = 6
print b += b++

或者更奇怪的情况:

b = 6
b += ++b + b++
print b

  换句话说,后缀运算符(b++ )规定的各种副作用何时生效?副作用的生效时机是由具体实现定义的。也就是说,取决于所用 awk 的具体版本。第一个示例的结果可能是 12 或 13 ,第二个示例的结果可能是 22 或 23 。

简而言之,这类写法不建议使用,而且绝对无法保证可移植性。你应在自己的程序中避免此类写法。


作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.

http://www.dtcms.com/a/340811.html

相关文章:

  • linux的内核符号表
  • 服装外贸系统软件怎么用才高效防风险?
  • 曲面的交线的切向量计算及其在坐标平面投影的几何分析
  • 有向图(Directed Graph)和有向无环图(Directed Acyclic Graph,DAG)代码实践
  • 反向Shell(Reverse Shell)
  • Meta 再次重组人工智能部门
  • Visual Studio 2010 简体中文旗舰版 安装全过程详解(附安装包下载)
  • 常见的学术文献数据库
  • 华为数通认证学习
  • 微服务网关中数据权限传递的那些坑:从 Feign 兼容性问题到解决方案
  • 【鸿蒙心迹】7×24小时极限求生:当Origin_null遇上鸿蒙,我如何用100杯咖啡换一条跨域活路?
  • IDM 下载失败排查全攻略
  • HT6881:重塑便携式音频体验的高效能功率放大器
  • 【运维进阶】Linux 正则表达式
  • 怎么确定mysql 链接成功了呢?
  • Electron开发的核心功能要点总结,旨在帮助快速掌握Electron开发核心逻辑
  • 淘宝电商大数据采集【采集内容||采集方法|工具||合规性||应用】
  • 【爬虫实战-IP代理的重要性一】 以urllib和request为例
  • 【React】评论案例列表渲染和删除功能
  • 【工具使用-Docker容器】构建自己的镜像和容器
  • GO环境变量中GO111MODULE到底是干啥的?
  • ES常用查询命令
  • HTML应用指南:利用POST请求获取全国刘文祥麻辣烫门店位置信息
  • 无人机图传 便携式5G单兵图传 HDMI图传设备 多卡5G单兵图传设备详解
  • 极其简单二叉树遍历JAVA版本
  • PDF如何在Adobe Acrobat 中用OCR光学识别文档并保存可编辑文档
  • 【开源项目】高效入门视觉强化学习,告别零散资料,一个开源项目搞定500+资源
  • Java 15 新特性及具体应用
  • 从导航工具到空间智能体,高德用AI寻找出路
  • 大数据毕业设计选题推荐-基于大数据的1688商品类目关系分析与可视化系统-Hadoop-Spark-数据可视化-BigData