Bash 参数转发:"$@" 保留的边界,为什么 "$*" 会合成一个参数 包装脚本最容易丢掉的是参数边界给常用命令包一层脚本时,常见需求是先做一点准备,再把用户提供的参数交给真正的程序。参数里一旦出现空格、空字符串或星号,肉眼看上去一样的一串文本,传过去却可能已经变成不同数量的参数。问题发... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash 没匹配到文件:星号为什么会原样进入循环 空目录里的循环居然执行了一次脚本用星号匹配当前目录的文本文件,目录里明明没有文件,循环却执行了一次,打印出带星号的名字。这是 Bash 默认路径名展开的行为:没有匹配结果时,模式原样保留。程序收到的不是“零个文件”,... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Linux flock 防任务重叠:锁文件存在,不代表锁仍被占用 定时脚本每分钟启动一次,但一次处理偶尔超过一分钟,就会出现任务重叠。仅检查一个标记文件是否存在,容易留下过期状态,也有检查与创建之间的竞态。Linux 上可用 flock 让协作进程竞争同一把文件锁。本文在本地文件系... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Bash heredoc 引号实战:生成配置时,哪些内容会被提前展开 脚本用 heredoc 写配置时,文件中本来应该保留的变量名却变成了当前环境的值,常见原因是结束标记没有引用。heredoc 并非简单的多行字符串,它是一种重定向结构,正文是否展开由标记的写法决定。本文在 Linux... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Bash 管道退出码:别让 tee 把前面的失败藏起来 构建命令报错了,CI 却显示成功,一个常见原因是输出被接到 tee 后,只检查了整条管道的默认状态。本文针对 GNU Bash 5.x 的前台管道;PIPESTATUS 是 Bash 特性,不要把示例直接交给其他 s... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读