我认识的某个人今天对我们这些倾向于不在文件名中使用空格的人表示不满,例如NamingThingsLikeThis.txt
——尽管大多数现代操作系统都支持在文件名中使用空格。
在那儿技术原因文件名中不包含(适当)空格的情况仍然很常见?如果是这样,那么避免或不鼓励在文件名中使用空格的技术原因是什么?在什么情况下这些原因很重要?
我能想到的最明显的原因,也是我通常避免使用它的原因,是处理此类文件时命令行上需要额外的引号。还有其他重要的技术原因吗?
答案1
在命令行和脚本中的许多情况下,文件名中的空格字符可能会非常麻烦,您必须小心确保它们被正确转义,以免看起来像您正在运行的命令的分隔符。
即使您确定文件/目录/其他内容永远不会在这样的上下文中使用,最好不要将它们放在那里。
而且,积习难改。
答案2
除了有关命令行和旧习惯的其他答案之外,还有许多网络协议在处理包含空格的文件名时需要特别小心。
(如果您曾经尝试从网站下载“Product List.pdf”,最终得到一个名为“Product”的文件,那么您就被这个问题困扰了,因为另一端的程序员不知道或无法弄清楚 http Content-Disposition 标头的引用规则。)
答案3
很多原因都是历史原因,但这并不意味着它们在今天就毫无意义。
可移植性问题
命名文件时,您可能还需要考虑其他(文件)系统将如何处理该文件名。文件名中的字符可能对您的系统没有问题,但对其他系统来说可能是一个问题。
因此,只要你希望能够从旧系统轻松访问该文件,你就只能选择安全的字符。这可能包括启动到您保留的旧恢复系统,或者担心最近的 Windows 版本仍然以某种方式基于 MS-DOS。
长度
文件系统可能会限制文件的长度。在 MS-DOS 被限制为8.3 文件名。因此,省去空格可让您在名称中放入更多有意义的字符。
其他几个文件系统也对其文件名长度定义了严格的限制。维基百科中有一张表格有关文件系统比较的文章对于那些想要了解详细信息的人。
保留字符
MS-DOS 还将空格字符定义为保留字符。这是因为空格字符用于FAT 中的填充. 此外,MS-DOS 没有在 shell 中提供转义系统。
命令行解释
我知道的大多数命令行使用空格字符作为参数分隔符。当忽略正确地转义文件名时,可能会产生严重的后果,因为文件名的一部分可能会被解释为您想要调用的应用程序的参数。
考虑一下
rm foo bar
和
rm "foo bar"
上面链接的 WikiPedia 文章甚至指出了由于未能正确转义命令而导致的歧义:
可以通过首先禁止文件和目录名称中嵌入空格(例如,用下划线“_”替换它们)来防止歧义,或者,如果命令行解释器和以这些参数为参数的程序支持,则通过在引号字符之间用嵌入空格括起名称或在空格前使用转义字符(通常是反斜杠(“\”)。例如
Long path/Long program name Parameter one Parameter two ...
有歧义(“程序名称”是程序名称的一部分,还是两个参数?);但是
Long_path/Long_program_name Parameter_one Parameter_two ..., LongPath/LongProgramName ParameterOne ParameterTwo ..., "Long path/Long program name" "Parameter one" "Parameter two" ...
和 Long\ 路径/Long\ 程序\ 名称 参数\ 一 参数\ 二 ...
不含糊。
统一资源定位符 (URL)
当尝试使用 URL 描述文件的位置时,需要转义空格。
字符不安全的原因有很多。空格字符不安全是因为在转录或排版 URL 或使用文字处理程序处理 URL 时,重要的空格可能会消失,而无关紧要的空格可能会出现。
来源:RFC1738
因此,空格必须用 代替%20
。这会使 URL 的文件名部分更难读,因此人们首先会避免使用它。
答案4
有时,空格可能会在命令行上处理时出现问题,或者在使用较旧的操作系统时出现问题,或者在编写将在不同操作系统上编译的程序时出现问题,或者...有很多原因可能导致问题,但我觉得将文件写成如下形式并不是什么麻烦:无空白文件.txt或者无空白文件.txt。我更喜欢 dask,因为在处理下划线字体等时,下划线有时会变得不可见。
但大多数情况下,这是从小养成的习惯。我觉得还不够赞成放弃的理由。
补充一点,可能不相关,但我还是要在这里说一下。用空格命名文件的人通常不会太在意这一点;那些不知道的人往往不知道为什么在文件名中避免使用空格是好的。
而且,我们都同意,没有什么比文件名为“尊敬的先生或女士,我写这封信是为了通知您 yo.doc”的文件更糟糕的了。
不仅仅是空格 - 文件长度也很重要,恕我直言,它不应该超过 30 个字符。对于需要在较旧的操作系统下以及在 Win 和 *nix 平台之间读取的 CD、DVD 等而言,带有空格的长文件名也是一种福音。