Bash source 位置参数:明明单独传了参数,set -- 为什么仍会改变外层 公共脚本通过 source 载入,调用时还专门给它传了一组参数,外层原有参数却仍被改掉。先查看被载入文件是否执行了 set --。在本文实测的 Bash 顶层调用中,只读取临时参数与显式重设位置参数,会得到不同的返回... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Node.js promisify:回调给出两个结果,await 为什么只拿到第一个 旧接口通过回调同时返回内容与附加信息,改成 await 后只剩内容,附加信息没有报错却消失了。首先检查默认适配器如何定义成功结果。一个 Promise 只有一个兑现值,旧回调里的多个成功参数需要明确包装,不能期待转换... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 后行断言:同样的贪婪分组,为什么在左边少拿了一个字符 把两个捕获组移进后行断言,表达式仍然匹配成功,但第一个组从 ab 变成 a,第二个组从 c 变成 bc。不是贪婪规则失效了,而是断言从当前位置向左检查,右侧的组先获得匹配机会。判断分组结果时,必须把方向一起带进推演。... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Node.js error 事件:监控已经记录了异常,程序为什么仍然会抛错 给事件对象加上监控回调后,日志已经记下错误,程序却仍然抛出异常。原因可能是注册了 errorMonitor,却没有真正的 error 监听器。监控负责观察错误事件,并不代表应用已经接手处理;两者的职责不能靠“日志里看... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite changes 与 total_changes:插入两行,触发器多写的两行算在哪里 一次插入两条主记录,触发器又为每条写一条日志。应用拿 changes 得到二,另一个统计却显示四,看起来像数据库多执行了插入。其实两个计数器的范围不同:一个看最近完成的主语句直接影响多少行,另一个累计这个连接执行过的... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite ORDER BY 同名别名:原列是数字,排序为什么先出现 10 再出现 2 报表把数值统一显示为两位小数,顺手让格式化结果沿用原列名称 n,再写 ORDER BY n。表里明明存着数字,输出却把 10.00 排在 2.00 前面。应先看排序名称最终指向哪个表达式:在这里,它指向同名的输出别名... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite HAVING 不写 GROUP BY:三条输入为什么最后只剩一行或零行 想在待办数量达到门槛时返回一个汇总,查询写了 count 和 HAVING,却没有 GROUP BY。它并不会为每条任务分别做一次门槛判断:这是整体聚合,所有经过筛选的输入共同形成一份统计,条件决定这份统计是否进入结... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite 延迟外键:COMMIT 已经报错,事务为什么还没有结束 导入关联数据时,子记录先到,父记录稍后才写入。延迟外键允许这类暂时不完整的状态存在于事务内部,但提交时仍必须满足约束。容易漏掉的是恢复动作:COMMIT 因延迟外键失败之后,事务可能仍然开着,已经执行的插入也还在其中... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python scandir 元数据缓存:文件已经变大,旧 DirEntry 为什么仍报原来的大小 扫描目录后把 DirEntry 对象存进列表,过一会儿再用它们统计大小,结果可能一直停在旧数字。文件确实已经被写大,目录项也不是没找对;关键在于 DirEntry 会缓存取得的部分元数据,重复调用它的方法不等于每次重... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Python 标准输出缓冲:已经 print 了一行,重定向文件为什么还看不见 脚本在终端逐行显示进度,重定向到文件后却很久没有新内容,结束时才一起出现。先确认程序有没有走到 print,再检查标准输出的缓冲方式。正常交互终端通常采用行缓冲,重定向到普通文件时通常采用块缓冲,换行未必立即送出去。... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读