文件名中可以​​使用哪些字符?

文件名中可以​​使用哪些字符?

我似乎可以在 unix 中使用任何有效字符创建文件名。

touch \; &&
touch \\ &&
touch \" &&
touch $'\n' &&
touch $'\t' &&
touch $'\v' &&
touch $'\23' &&
touch $'\13' &&
echo "DONE!"

我发现唯一不起作用的字符是/NUL

touch /
touch $'\0'

是否还有其他无效或无法在文件名中使用的字符?

答案1

答案是:在类Unix系统中,文件名由以下组成:字节,而不是字符。至少从内核及其 API 的角度来看是这样。

类 Unix 内核通常对除\000 (ASCII: NUL) 和\057 (ASCII: 斜杠) 之外的任何字节值都是中立的。在Linux中,文件系统层没有其他限制,但某些FS驱动程序及其模式会导致某些名称被拒绝,通常是由于无法翻译。例如,无法UTF-8在使用任何挂载的东西-o iocharset=utf8(例如 typescifsvfat)上创建无效的文件名。任何 DOS/Windows 兼容的 FS 都不允许您将 \134(ASCII:反斜杠)作为名称的一部分。或者该msdos类型将应用有关 8.3 名称的 DOS 限制。

Ext3/ext4 未知有限制,但前面提到的\000\057.

相关内容