Chr*_*ein 22 filenames unix-philosophy
它是正确使用某些特殊字符,如+
,&
,'
,.
。(点)和,
(逗号),基本上,在文件名中。
我知道您可以使用-
并且_
没有问题,但是在进行一些研究时,我无法找到有关其他符号的确切信息;有人说你可以,有人说你不能,还有一些人说“不鼓励”使用它们(无论这意味着什么)。
Red*_*ick 31
使用某些特殊字符是否正确,如 +、&、'、. (点)和,(逗号),基本上,在文件名中。
是的。
正确但不一定可取或方便。
在现代 Unix 和 Linux 文件系统中,您可以使用除 null 和/
文件名之外的任何字符。
您可以使用ASCII 标点符号。一些实用程序在它们创建的文件名称中使用停止符 ( dot ) 和逗号。
您可以使用ASCII 控制字符,但是这是不可取的,因为它们不太可能以可接受的方式显示并且难以使用。
您可以使用shell 元字符,例如 ASCII 与号和 ASCII 撇号。然而,这很不方便,并且需要在构建命令时特别注意引用或转义这些字符。
您可以使用多种编码来使用多字节字符。正确解释和显示非 ASCII 字符取决于 shell 和/或实用程序。建议将自己限制为流行的编码(例如 UTF-8)并适当设置区域设置。
使用 ASCII 可打印字符时,您将遇到的问题最少,将标点字符集限制为非 shell 元字符并且不以连字符(或停止符 - 除非您想隐藏文件)开头的名称。
nyu*_*a7h 26
正如其他人所说,在现代 Unix/Linux 系统上,文件名可以包含除\0
(NUL) 和/
(斜线)之外的任何字符。
除此之外,POSIX 标准为文件名定义了一个可移植的字符集:
3.282 可移植文件名字符集
构建可移植文件名的字符集。
Run Code Online (Sandbox Code Playgroud)A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 . _ -
最后三个字符分别是 <period>、<underscore> 和 <hyphen> 字符。另见路径名。
GNU Coreutils的pathchk
实用程序在使用该选项调用时会对此进行检查,该选项将警告空文件名(无效但可以作为参数传递给)和以连字符 ( )开头的文件名。-p
-P
pathchk
-
最安全的选择是参考维基百科条目,了解任何操作系统允许的字符集。可以从这里找到。
例如,对于大多数基于 unix 的系统,允许的字符集是 8 位集,保留字符是空字符(NUL, '\0'
)。但是,在文件名中使用特殊字符不是一个好习惯,因为它们在删除它们时会带来问题。
例如,我可以有一个文件名,-ramesh.txt
然后尝试将其删除,如下所示。
rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
Run Code Online (Sandbox Code Playgroud)
我需要删除文件,
rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y
Run Code Online (Sandbox Code Playgroud)
也可以从此答案中找到更多详细信息。
/
我相信在 Linux 和 OS-X 中,只有可打印的 ASCII 集是被禁止的。某些字符(如 的 shell 元字符*?!
)会导致命令行出现问题,并且需要适当引用或转义文件名。ext2、ext3 等 Linux 文件系统与字符集无关(我认为他们只是或多或少地将其视为字节流 - 只有空值并且
/
被禁止)。这意味着您可以以 UTF-8 编码存储文件名。我相信 shell 或其他应用程序知道使用什么编码来正确转换文件名以进行显示或处理。
总而言之,问题不在于对文件名使用特殊字符,而在于如何处理它们。
你的研究几乎是正确的。可以在文件名中使用特殊字符,但不建议这样做,因为这些字符具有特殊含义。Linux 中的文件命名约定还描述了对文件名的其他限制,例如“文件名不应以连字符开头”。
使用文件名中的特殊字符执行命令行操作的简单示例。
作为个人说明,我宁愿避免文件名中使用特殊字符,因为在使用这些文件进行任何处理时需要特别注意它们。因此,从开发过程中消除了处理特殊字符的担忧。