Unix文件名与Windows文件名的差异( 二 )


三、 扩展名的要求不同 。
【Unix文件名与Windows文件名的差异】在Windows操作系统中 , 一般要求文件都必须有扩展名 。操作系统是根据这个扩展名来关联应用程序的 。如text.txt , 最后 , .txt就是文件的扩展名 。特别是对于一些脚本批处理程序 , 都要求以bat扩展名结尾 。只有如此 , 操作系统才会当作批处理程序来执行 。不过在Unix操作系统中却没有这么严格的要求 。即使是普通文件 , 扩展名也是可有可无的 。如默认情况下 , sh是Unix操作系统下的可执行文件 。但是如果工程师编写的可执行文件不带上这个扩展名 , 其也可以运行 。这主要是两个操作系统调用脚本程序的方法不同 。在Windows操作系统的命令行窗口下 , 只要输入脚本程序的全名(带上扩展名) , 即可以运行这个脚本程序 。但是在Unix操作系统的shell中 , 调用某个脚本程序的话 , 需要在这个脚本程序前面加上./等符号 , 表示让系统执行这个程序 。也即是说 , 他不是以扩展名来区分这是否是一个可执行的脚本程序 。而是根据命令行的前缀来判断 。为此在Unix操作系统中 , 对于扩展名没有任何的规定 。
虽然Unix操作系统中对于扩展名没有硬性的规定 。但是在通常情况下笔者仍然建议用户在建立普通文件的时候 , 最好还是加上扩张名 。只有如此 , 看扩展名、而不用看文件的具体内容 , 就可以了解文件的类型 。如一看到sh扩展名 , 就知道这是一个脚本文件 。而不用再去看其里面的内容 。类似的 , 对于C语言源文件、文本文件等等最好都能够加上一个扩展名 , 以示区别 。
四、 在文件名中可以带有特殊字符 。
在Windows操作系统中 , 虽然也可以使用大部分字符来作为文件名 , 但是对于一些特殊字符的使用 , 其有严格的限制 。如对于一些具有特殊用途的字符/、*号等符号就不能够成为其文件名 。不过在Unix操作系统中 , 在这方面就没有这么严格的要求 。如在Unix操作系统中 , text*.txt、text/tet.txt等文件名都是合法的 。所以不考虑其他因素 , 在Unix操作系统中的文件基本上可以采用任何的字符 。不过有些字符具有特殊的含义 , 如果将这些字符加入到文件名字中 , 可能对后续的操作会带来不利的影响 。
如笔者一开始就谈到的 , 英文状态下的点号是一个文件数据的控制符号 。如果在普通文件或者目录文件名字的第一个字符是英文状态下的点号 , 那么就表示这是一个隐形的文件或则文件夹 。为此在定义文件时 , 除非有特殊的需要要把他们设置为隐藏的 , 那么不要以应为状态下的点号开头 。不过一个文件名字的后面可以带上多个点号 , 即可以利用点号来区分 。如student.num.txt 。就表示一个学生学号的文本文件 。如果在Windows操作系统中 , 会认为这个文件有两个扩展名 。在第一次打开这个文件的时候 , 系统会提示用户使用哪个软件打开 。不过在Unix操作系统中认为这是合法的 。
虽然*、-等符号也可以作为文件的名字 。但是因为其有一些特殊的含义 , 为此在利用他们来给文件命名的时候 , 需要谨慎使用 。如跟点号类似 , 最好不要以-符号作为文件名字的第一个字符 。因为这个-符号在系统中表示命令的可选项 。为此在使用cat等命令操作这个文件时 , 系统会误把文件名参数当作可选项来对待 。结果发现没有这个可选项而保错 。另外这个*符号 , 在系统中表示通配符 。如果此时利用rm命令来删除带*好的文件名字 , 必须使用转义字符 。否则的话 , 会发生一些灾难性的后果 。为此 , 笔者建议 , 虽然在Unix系统中可以使用一些特殊的符号作为文件或者目录的名字 。但是除非有特殊的必要 , 最好在文件名字中不要包含特殊符号 。否则的话 , 用户很可能会因为过度追求个性 , 而自讨苦吃 。

推荐阅读