← 全部文章

技术与生活 / 一篇记录

Shell 中一对引号能避免多少问题

变量展开之后还可能继续经历分词与文件名匹配。参数里一个普通空格,就可能把原来的一条路径变成两条参数,导致命令操作完全不同的对象。

先明确这里的区别

未加引号的变量会发生分词和通配符展开,包含空格的路径尤其容易出错。

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

name='hello world'; printf '%s\n' "$name"

怎样判断处理正确

示例应输出完整的一行,而非两个独立参数。

用空字符串、带空格字符串和星号分别测试。printf 的格式串保持固定,把数据放在后面的参数位置,也能避免输入意外成为格式指令。

引号也不意味着可以把多个参数提前拼成一个字符串。复杂命令在 Bash 中更适合使用数组保存各个参数,再逐项展开,这样路径中的空格与选项边界都能被明确保留。

需要留意的是,不要用 eval 处理普通用户输入。

参考:Shell 文档。

搜索文章

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