← 全部文章

技术与生活 / 一篇记录

不要把 ls 的展示结果当成文件列表接口

给人阅读的输出可能受到列宽、颜色、转义和语言环境影响。文件名又允许空格与换行,把文本再按空白切开,会丢掉原本的路径边界。

文件名可以包含空格甚至换行,展示文本不适合作为结构化接口。

实际怎么检查

以下示例使用 Bash,请在独立测试目录中理解输入、输出和退出码。

for file in ./*.txt; do [ -e "$file" ] || continue; printf '%s\n' "$file"; done

用带空格的文件名测试,确认仍作为单个参数处理。

遇到异常再检查什么

用包含空格的文件名验证参数是否完整。需要处理更复杂的目录树时,可以选择支持空字符分隔的工具组合,而不是不断修补文本切分。

对文件名的展示与操作也要区分。printf 输出的一行不一定能够无歧义地表示含换行的名称;用于机器传递时,优先使用能够保留参数边界或空字符分隔的接口。

通配符无匹配时的行为需要显式考虑。

参考:Shell 文档。

搜索文章

输入关键词,找回一篇记录。