Bash noclobber 防覆盖:已有文件不能用 >,为什么追加和 >| 仍能写入 脚本把结果重定向到 report.txt,下一次运行就可能清空旧内容。启用 noclobber 后,普通输出重定向遇到已经存在的普通文件会失败。不过,这个选项没有把文件整体变成只读;追加仍可执行,显式覆盖操作也可以绕... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Bash nameref 的改值与改指向:给 ref 赋新名字,为什么原变量反而变了 封装配置函数时,常会把变量名传进去,再通过 nameref 修改调用方的数据。最容易出错的一步,是把 ref=right 当成“以后改写 right”。当 ref 已经引用 left,这条普通赋值实际把字符串 rig... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Node.js Buffer.alloc 重复填充:ab 为什么变成 ababa,中文末尾又为何被切开 生成固定长度测试报文时,给 Buffer.alloc 传入五和字符串 ab,结果会出现 ababa。容量明明是五,为什么模式没有完整重复三次?因为第一个参数规定字节数,第二个参数提供填充模式;写满指定空间就停止,最后... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Intl.DateTimeFormat 午夜显示 24:h23、h24 与 hour12 的覆盖顺序 同一个午夜,小时字段未必都是零前端格式化时间时,指定二十四小时制后却看到午夜显示二十四,很容易怀疑时间戳多了一天。先别急着调整日期:Intl.DateTimeFormat 的 h23 与 h24 是不同的小时周期。前... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Unicode 片假名校验:长音符明明在词里,Script 为什么不认它 看起来属于一个词,不等于只有一种脚本属性给片假名输入框写正则时,很容易使用 Script=Katakana,再用加号要求一个或多个字符。单独测试“コ”能通过,换成“コーヒー”却失败。问题出在中间的长音符“ー”,也就是... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
Promise.any 等的是首次成功:先失败的任务,为什么没有结束整组等待 先结束与先成功,是两种等待条件同时读取几个等价数据源时,最快返回的请求可能恰好失败。Promise.race 采用第一个确定结果的任务,无论它成功还是失败;Promise.any 则等待第一个成功兑现的任务,前面的拒... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite WITHOUT ROWID 主键:同样的建表字段,为什么空值规则变了 主键写在纸上,约束还要看表的类型把普通表的建表语句末尾加上 WITHOUT ROWID,字段名称没有变化,旧数据却可能导入失败。最容易忽略的原因是主键中的空值:SQLite 为兼容历史行为,普通、非 STRICT 的... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
SQLite json_set 路径边界:缺少父对象能补上,父位置是 null 为什么却不更新 一批配置里有的记录没有 prefs,有的把 prefs 写成 JSON null。给它们统一执行 json_set(doc, '$.prefs.theme', 'dark'),结果前者增加了对象,后者仍然原样返回。函... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读
Python find_spec 探测子模块:还没导入它,为什么父包代码已经执行了 插件发现代码只是想判断 package.feature 是否存在,调用 find_spec 后却看到包的初始化日志。函数没有执行目标子模块,不代表整条查找路径完全没有导入行为。名称包含点号时,它需要导入父模块来获得子... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读
Python finalize 清理回调:已经删掉对象,为什么绑定方法还把它留住了 为对象注册销毁时的清理动作,最顺手的写法是 weakref.finalize(obj, obj.close)。但删掉 obj 后,close 迟迟没有执行。终结器虽然通过弱引用观察目标,它保存的回调却是绑定方法;绑定... yunqueblog/ 技术教程/ 2026-10-02/ 4 阅读