Answers:
在命令行和脚本中的许多情况下,文件名中的空格字符在谚语中可能是正确的皇家之痛,在脚本中,您必须要小心以确保正确地转义了它们,因此看起来不像是命令的分隔符运行。
即使您确定在这种情况下永远不会使用文件/目录/任何内容,也不要在其中放置它们,这是更安全的做法。
那样,旧习惯很难消亡。
'\n'
名称中带有换行符()的文件。(类似Unix的系统实际上允许这样做;通常是Windows,或者至少使它变得困难。)
除了关于命令行和旧习惯的其他答案外,还有许多网络协议在处理包含空格的文件名时需要特别注意。
(如果您曾经尝试从网站上下载“ Product List.pdf”,而最终得到一个名为“ Product”的文件,则会被这个问题所困扰,因为另一端的程序员不知道或无法不能弄清楚http Content-Disposition标头的引用规则。)
许多原因都是历史原因。这并不意味着它们今天没有意义。
在命名文件时,您可能还必须考虑其他(文件)系统如何处理该文件名。文件名中的字符可能适合您的系统,但对于另一个系统可能是一个问题。
因此,只要极有可能您希望能够从较早的系统轻松访问文件,就只能选择安全字符。这可能包括引导进入您保留的旧恢复系统,或者担心最新的Windows版本仍然以某种方式基于MS-DOS。
文件系统可能会限制文件的长度。在MS-DOS被限制为8.3文件名的日子里,这甚至更加严重。因此,通过保留空格,您可以在名称中添加更多有意义的字符。
其他几个文件系统也对文件名长度定义了严格的限制。维基百科在有关文件系统比较的文章中提供了一个表格,供需要详细信息的人使用。
MS-DOS还将空格字符定义为保留字符。这是由于在FAT中使用了空格字符这一事实。此外,MS-DOS在外壳程序中未提供转义系统。
我知道的大多数命令行都使用空格字符作为参数定界符。如果忽略正确地转义文件名,则可能会产生可怕的后果,因为文件名的某些部分可以解释为要调用的应用程序的参数。
考虑一下之间的区别
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 \ path / Long \ program \ name Parameter \一个Parameter \两个...
不am昧。
尝试使用URL描述文件的位置时,需要转义空格。
出于多种原因,字符可能是不安全的。空格字符是不安全的,因为在对URL进行转录或排版或对文字处理程序进行处理时,可能会消失大量空格并且可能会引入无关紧要的空格。
来源:RFC1738
因此,必须用a %20
代替空格。这使得URL的文件名部分不那么可读,因此人们一开始就避免使用它。
有时,在命令行上处理,使用较旧的OS或编写要在不同OS上编译的程序时,或者当...出于很多原因可能出现问题时,空格可能会带来问题。确实感觉写这样的文件很麻烦:file-without-blanks.txt或file_without_blanks.txt。我比较喜欢使用dask,因为在处理带下划线的字体时,下划线有时会变得不可见。
但大多数情况下,这是从老年起就习惯的问题。我认为没有足够的专业理由要放弃。
附加说明,可能不相关,不过我还是将其放在此处。用空格命名文件的人通常不会考虑太多。那些不太了解为什么最好不要使用文件名的人。
而且,我们都可以同意,没有什么比这文件名为“尊敬的先生或女士,我正在写这封信通知您yo.doc”更糟糕的了。
不只是空格-文件长度也很重要,恕我直言,它的长度不能超过30个字符。对于带有空格的长文件名,在刻录CD,DVD等文件时也很幸运,这些文件需要在较旧的OS以及Win和* nix平台之间读取。