Bash 逐行读取文本:保住空格、反斜杠和没有换行的最后一条 看见四条内容,循环却只处理三条读取一份手工编辑的文本清单时,最后一条明明看得见,循环却没有执行它。常见原因是文件末尾没有换行符:read 已经把末尾字符放进变量,但由于遇到文件结束而返回非零。如果循环只依据退出状态决... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python argparse 布尔开关:为什么传入 false,结果却仍然为真 先决定用户要传开关,还是传一个值一个报告脚本默认启用缓存,调用者希望临时关闭,于是输入缓存参数和单词 false,结果缓存仍然开启。问题往往不在缓存逻辑,而在命令行入口:布尔转换函数只判断字符串是否为空,并不理解这个... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript 数组空洞:同样读到 undefined,为什么 map 少执行了一次 长度为三,不代表三个位置都有元素表格有三行,程序用 new Array(3) 准备容器,再调用 map 生成行对象,结果回调一次都没有执行。问题不在回调函数,而在这个数组只有长度,没有对应的索引属性。这样的缺位通常叫... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git 稀疏检出:目录看不见了,为什么 git ls-files 仍然能列出来 先分清本地看见什么与仓库记录什么大型仓库同时放着网页、接口和文档,当前只修改网页时,可以用稀疏检出减少工作区实际展开的文件。操作之后,文档目录可能从文件管理器里消失,但这并不表示提交已经删除文档。磁盘上能看见的路径,... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
SQLite 累计窗口:时间相同的两条记录,ROWS 和 RANGE 为什么算得不同 同一时刻的记录要不要一起算进去库存流水里,同一时刻可能有两笔入库。一张逐笔明细希望第一笔之后就显示余额,另一张看板却希望同一时刻的所有记录都显示该时刻结束后的余额。两种累计都合理,但计算口径不同。只写“按时间求累计和... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python zip 严格配对:长度不一致何时才报错,已经做的操作怎么办 两列数据配对之前,先决定能否少一行导入清单时,一列是物品编号,另一列是对应数量。如果编号有三项,数量只有两项,默认的 zip 会在较短输入结束时停止,第三个编号不会出现在结果里。程序正常结束,却少处理一项,这种错误往... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash export 环境继承:变量怎样交给子进程,又为什么改不回父进程 终端里看得见,不代表启动的程序也看得见脚本里给一个变量赋值,随后启动另一个程序,对方却说配置缺失。这时首先要检查变量是否导出。普通 shell 变量存在于当前 shell 的执行环境里;启动外部程序时,只有准备传递的... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript BigInt 精确传输:从字符串入口到 JSON 往返都保住整数 转换成大整数之前,原始值必须仍然完整后端发来一个很长的计数值,前端先转成 Number,再转成 BigInt,结果尾数已经变了。后一次转换不会找回前一次舍入掉的数字:它只能把当前保存的数值变成大整数。精度约定必须从输... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python ipaddress 网段判断:地址前缀相似,为什么仍然不属于同一网络 先把文本解析成地址,再判断集合关系检查地址是否落在某个网段时,字符串前缀很容易写,却没有表达网络掩码的能力。例如一个网段只包含最后一段的一半地址,前面三段看起来仍完全相同。用文本开头判断会把另一半地址一起接受,日志里... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读
Python lru_cache 返回值复用:缓存命中之后,列表到底属于谁 两次拿到相同内容,可能也是同一个对象页面需要一组标签,于是给生成标签的函数加上缓存。第一位调用者追加一个临时标签,第二位调用者随后竟然也看到了它。函数体看起来每次都会创建列表,但命中缓存时,函数体根本不会重新执行;先... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读