文件名中不允许有空格吗?

Tim*_*Tim 36 filenames

据说在一般的 Unix 和 Linux 上,您应该避免在文件(普通文件、目录、链接、设备文件等)的文件名中包含空格。

但我总是这样做。对于内部有空格的文件名,

  • 在 Nautilus 中,空格字符显示为空格。
  • 在 Bash 终端中,我要么\ 用来表示一个空格,要么用一对双引号将文件名括起来。
  • 在某些应用程序的文件中(Nautilus,不确定操作系统是否也会这样做),文件名中的空格替换为%20.

文件名中真的不允许有空格吗?

您如何正确使用或处理文件名中的空格?

Cel*_*ada 53

/文件名中允许使用空格,实际上除了和 NUL之外的每个字符。建议不要在文件名中使用空格是因为它们可能会被不支持它们的软件误解。可以说,这样的软件是有缺陷的。但也可以说,像 shell 脚本这样的编程语言使得编写在文件名中包含空格时会崩溃的软件变得太容易了,而且这些错误往往会漏掉,因为开发人员通常不会使用带有空格的文件名来测试 shell 脚本。他们。

替换%20为的空格在文件名中并不常见。这主要用于(网络)URL。尽管 URL 中的 % 编码确实有时会进入文件名,但通常是偶然的。

  • 它是“URL 编码”或“百分比编码” http://en.wikipedia.org/wiki/URL_encoding 最合适的名称可能是“URI 编码”,但人们发现 *url* 比 *URI* 更容易说,所以这是用词不当的常见形式。请注意,URI 中的保留字符集大于 *nix 文件名中的保留字符集。 (6认同)
  • @Celada 当然你可以使用 `NUL` 和 bash,你需要 `$'\0'`。例如:`查找。-print0 | while read -d $'\0' f; 做 echo "$f"; 完成` (3认同)

gol*_*cks 20

正如您所观察到的,文件名允许有空格。

如果您查看wikipedia 图表中的“大多数 UNIX 文件系统”条目,您会注意到:

  • 允许使用任何 8 位字符集。我们也可以将 7 位 ASCII 包含在这个伞下,因为它是各种 8 位集的子集,并且总是使用 8 位字节实现。

  • 唯一禁止的字符是/和“null”。“Null”是指零字节,但无论如何都不允许出现在文本数据中。

但是,如果您使用过 shell,您可能会意识到有些字符会造成麻烦,最重要的是*,这是一个 POSIX 通配符。

根据您想如何定义“麻烦”,您可以在其中包含空格(空格、制表符、换行符等),因为这需要使用"". 但这是不可避免的,因为空间是允许的,所以......

您如何正确使用或处理文件名中的空格?

在 shell/命令行上下文中,将文件名用单引号或双引号括起来(但请注意,它们与WRT 其他问题不同),或使用 转义空格\,例如:

> foo my\ file\ with\ spaces\ in\ the\ name
Run Code Online (Sandbox Code Playgroud)

  • 绝大多数编程语言都允许在字符串中使用空字符。碰巧的是,主要语言不是 C,而 Unix 正是基于 C 语言构建的——而且大多数 Unix shell 也不允许字符串中包含空字符。在任何情况下,@Tim,所有 Unix 接口都使用以空字符结尾的字符串,因此空字节是您在文件名中永远无法拥有的一件事(加上 `/`,它是目录分隔符,不能用引号引起来,因此可以在路径名中但不在文件名中)。 (5认同)