Bash 后置自增的退出状态:变量已经加一,为什么条件却走进失败分支 计数器从零开始,执行 ((n++)) 后确实变成一,但紧接着检查退出状态却是 一。若把它写在条件里,会走进 else。这里一并不说明自增没发生:算术命令用表达式的值决定真假,而后置自增表达式交出的是修改之前的值。下面... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash mapfile 的显式起点:同样从零写入,为什么旧数组尾部有时还在 一段脚本读取新清单时只收到一行,旧数组有三项。普通 mapfile 执行后只剩新的一项;为了把起点写清楚,加上 -O 0,尾部两项反而留下了。起点数字虽然相同,“是否显式指定起点”还会决定读取前是否清空数组。下面使用... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash IFS 分字段:两个制表符之间的空列,为什么读进数组就消失了 一行制表符分隔的数据原本有三列,中间列为空。脚本把 IFS 设为制表符,再用 read -a 读入数组,结果只剩两项,第三列挤到了第二列。这不是制表符没有生效,而是它属于 IFS 空白,连续空白按一段分界处理。不是每... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash local 命令替换:子命令返回失败,为什么紧接着的状态却是零 函数里用一行代码声明局部变量并收集命令输出,随后检查问号参数,发现生成命令明明失败,状态却是零。原因是这一行实际执行了 local 内建命令:声明成功可以盖住命令替换里那次失败,变量有内容也不代表生成过程完整。先分清... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash BASH_REMATCH:辅助函数匹配一次,外层捕获结果为什么被换掉 解析任务名称时,外层正则已经拿到了类型和编号,接着调用一个辅助函数检查编号是否全是数字,再读取捕获数组却发现类型不见了。问题可能发生在检查函数里:它执行了另一次正则匹配,把同一个 BASH_REMATCH 数组改成了... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash noclobber 防覆盖:已有文件不能用 >,为什么追加和 >| 仍能写入 脚本把结果重定向到 report.txt,下一次运行就可能清空旧内容。启用 noclobber 后,普通输出重定向遇到已经存在的普通文件会失败。不过,这个选项没有把文件整体变成只读;追加仍可执行,显式覆盖操作也可以绕... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash nameref 的改值与改指向:给 ref 赋新名字,为什么原变量反而变了 封装配置函数时,常会把变量名传进去,再通过 nameref 修改调用方的数据。最容易出错的一步,是把 ref=right 当成“以后改写 right”。当 ref 已经引用 left,这条普通赋值实际把字符串 rig... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash 删除数组中间项:元素只剩两个,为什么索引仍然是零和二 脚本把任务名放进数组,删除已经取消的第二项,再按数组长度从零循环到末尾。输出却多了一项空内容,真正的最后任务没被处理。Bash 索引数组允许不连续的下标,unset 只移除指定元素,不会把后面的任务向前搬;元素数量因... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash read 超时:返回失败后,为什么半行文字已经从输入里被读走 从管道读取一行数据,给 read 加上超时,失败后直接继续下一轮。偶尔一条完整消息就只剩后半段,因为超时前已经收到的字符被 read 消费并写进变量,失败返回不会把它们放回管道。超时表示本次没有等到完整边界,并不等于... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读
Bash source 位置参数:明明单独传了参数,set -- 为什么仍会改变外层 公共脚本通过 source 载入,调用时还专门给它传了一组参数,外层原有参数却仍被改掉。先查看被载入文件是否执行了 set --。在本文实测的 Bash 顶层调用中,只读取临时参数与显式重设位置参数,会得到不同的返回... yunqueblog/ 技术教程/ 2026-10-02/ 2 阅读