Bash case 的三个结尾:停止匹配、直接贯穿与继续检查怎样区分 一个文件分类脚本想给 report.log 同时标记“日志”和“报告”,把 case 分支结尾改了一下,却又标上了“表格”。问题往往不在文件名,而在分支执行完之后选择了哪一种控制方式。Bash 的三个结尾长得接近,后... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash set -e 的条件边界:函数放进 if 后,内部失败为什么继续执行 脚本开头已经写了 set -e,一个包含多步操作的函数单独调用时会在失败后退出。后来为了输出更友好的错误信息,调用者把它放进 if 条件,失败步骤之后的命令却继续运行,甚至走进成功分支。这不是失败命令突然成功,而是调... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git 附注标签:标签的对象标识,为什么与它指向的提交不同 发布脚本把标签解析出的标识和构建提交标识直接比较,发现不相等,于是认定打错标签。然而这个标签可能正是指向正确提交的附注标签。两边比较的对象类型不同:一边是装着发布说明的标签对象,另一边才是包含代码快照的提交对象。轻量... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git diff --no-index:仓库外也能比较目录,退出码一却未必只有一种原因 拿到两份解压后的配置目录,想知道哪些文件变了,并不一定要先建立仓库。git diff --no-index 可以直接比较磁盘上的两个路径。它适合检查生成文件、发行包或导出结果,但命令返回非零时,脚本不能立即下结论说比... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git notes 追加提交备注:信息补上了,原提交为什么仍是同一个 代码已经提交并被别人使用,第二天才拿到测试结果。如果为了补一句验证说明而重写提交消息,提交标识也会变化,原有链接和协作记录需要重新核对。Git notes 提供另一条路:把补充说明挂到已有对象上,让原提交继续保持原样... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript JSON.stringify:同一个 undefined,在对象里消失,在数组里变成 null 一个设置页面把备注改成 undefined,希望服务器清空它。调试时对象里确实有这个字段,但发出的 JSON 却没有,服务器因而保留旧值。另一个页面把同样的值放进数组,收到的却是 null。问题不在网络传输,而在编码... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript Proxy 不变式:拦截读取,也不能改写已经锁定的属性事实 给对象套上 Proxy,经常是为了记录访问、补默认值,或提供计算字段。一个常见误解是,只要写了 get 拦截器,读取结果就完全由自己决定。对象如果已经明确锁定某些属性,运行时仍会检查返回值是否与这些事实一致,检查失败... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript Object.assign:目标写到一半报错,前面的修改为什么还在 给现有配置对象合并新选项时,一次调用抛出了异常,很容易误以为目标完全没变。如果业务在捕获异常后继续使用旧配置,就可能混入已经成功写入的字段。要判断这种问题,需要观察每一次读取和赋值,而不能只看最后有没有返回对象。Ob... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python quantiles 分位数:同一组数据,inclusive 与 exclusive 为什么给出不同切点 先固定方法,再比较数字比较两份任务耗时报告时,平均值完全相同,四分位数却不同,不一定是谁算错了。有限数据的分位数需要约定每个观测值对应的位置,再计算中间切点。Python 标准库 statistics.quantil... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash command 与 type:绕过同名函数以后,为什么仍可能执行内建命令 同一个名字不一定指向同一个东西你在终端输入一个常用命令,输出却多了提示文字;复制进脚本后又恢复正常。先别急着重装程序,这个名字可能被别名或 shell 函数包装过。Bash 会按自己的解析和查找规则决定运行目标,命令... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读