Filip Roséen 深入探讨了 POSIX Shell 中一个被严重低估的字符——冒号(:)。这个被称为「空命令」的内建指令自 1971 年 Thompson Shell 就已存在,它什么也不做,仅仅求值并丢弃参数。但当它与 参数展开(parameter expansion)结合时,能在一行内优雅地完成参数校验、默认值设置、文件截断和权限检查等任务。例如 : "${1:?missing argument, aborting!}" 可以替代四行的 if 语句来检查必选参数。文章还展示了用 : > file.log 截断文件、用 (: < file) && echo OK 检查可读性等实用技巧,是每个 Shell 脚本开发者都该掌握的隐藏利器。
: "${1:?missing argument}" 可在变量未设置时打印诊断信息并退出,一行替代传统的 if 语句。: "${DATA_DIR:=/var/data}" 在变量为空时赋默认值,冒号吞掉求值结果而非将其作为命令执行。: > error.log 清空文件,(: < file) && echo YES 检查文件可读性,无需调用任何外部工具。true 更简洁。while :; do ... done,这是最简洁的无限循环写法。