当前位置: 首页 > news >正文

为什么文件名要小写?

上周,《中文技术文档写作规范》加入了文件的命名规则。

"文件名建议只使用小写字母,不使用大写字母。"

"为了醒目,某些说明文件的文件名,可以使用大写字母,比如READMELICENSE。"

网友看见了,就提问为什么文件名要小写?

说实话,虽然这是 Linux 传统,我却从没认真想过原因。赶紧查资料,结果发现四个很有说服力的理由,支持这样做。

下面就是这四个理由。

一、可移植性

Linux 系统是大小写敏感的,而 Windows 系统和 Mac 系统正好相反,大小写不敏感。一般来说,这不是大问题。

但是,如果两个文件名只有大小写不同,其他都相同,跨平台就会出问题。

  • foobar
  • Foobar
  • FOOBAR
  • fOObAr

上面四个文件名,Windows 系统会把它们都当作foobar。如果它们同时存在,你可能没办法打开后面三个文件。

另一方面,在 Mac 系统上开发时,有时会疏忽,写错大小写。


// 正确文件名是 MyModule.js
const module = require('./myModule');

上面的代码在 Mac 上面可以运行,因为 Mac 认为MyModule.jsmyModule.js是同一个文件。但是,一旦代码到服务器运行就会报错,因为 Linux 系统找不到myModule.js

如果所有的文件名都采用小写,就不会出现上面的问题,可以保证项目有良好的可移植性。

二、易读性

小写文件名通常比大写文件名更易读,比如accessibility.txt就比ACCESSIBILITY.TXT易读。

有人习惯使用驼峰命名法,单词的第一个字母大写,其他字母小写。这种方法的问题是,如果遇到全部是大写的缩略词,就会不适用。

比如,一个姓李的纽约特警,无论写成NYPoliceSWATLee还是NyPoliceSwatlee,都怪怪的,还是写成ny-police-swat-lee比较容易接受。

三、易用性

某些系统会生成一些预置的用户目录,采用首字母大写的目录名。比如,Ubuntu 在用户主目录会默认生成Downloads、 PicturesDocuments等目录。

Mac 系统更过分,一部分系统目录也是大写的,比如/Library/Audio/Apple Loops/

另外,某些常见的配置文件或说明文件,也采用大写的文件名,比如MakefileINSTALLCHANGELOG.Xclients.Xauthority等等。

所以,用户的文件都采用小写文件名,就很方便与上面这些目录或文件相区分。

如果你打破砂锅问到底,为什么操作系统会采用这样的大写文件名?原因也很简单,因为早期 Unix 系统上,ls命令先列出大写字母,再列出小写字母,大写的路径会排在前面。因此,如果目录名或文件名是大写的,就比较容易被用户首先看到。

四、便捷性

文件名全部小写,还有利于命令行操作。比如,某些命令可以不使用-i参数了。


# 大小写敏感的搜索
$ find . -name abc
$ locate "*.htmL"

# 大小写不敏感的搜索
$ find . -iname abc
$ locate "*.HtmL"

另外,大写字母需要按下 Shift 键,多多少少有些麻烦。如果文件名小写,就不用碰这个键了,不仅省事,还可以提高打字速度。

程序员长时间使用键盘,每分钟少按几次 Shift,一天下来就可以省掉很多手指动作。长年累月,也是对自己身体的一种保护。

综上所述,文件名全部使用小写字母和连词线(all-lowercase-with-dashes),是一种值得推广的正确做法。

(正文完)

相关文章:

  • 设计模式之——抽象工厂模式
  • 第八十课、多线程中的信号与槽(下)------------------狄泰软件学院
  • Eclipse在线安装hibernate tools插件
  • Laravel 实践之路: 数据库迁移与数据填充
  • Git与TortoiseGit基本操作
  • CHIL-ORACLE-创建非空约束
  • JavaScript思维导图之字符串函数
  • JS实现OO机制
  • Sql Server数据批量更新
  • Linux usb子系统(一) _写一个usb鼠标驱动
  • SylixOS iMX6平台I2C总线驱动
  • HTML初学者常用标签及属性
  • jquery特效 商品SKU属性规格选择实时联动
  • centos
  • Greenplum 简单性能测试与分析
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Android Studio:GIT提交项目到远程仓库
  • Apache Zeppelin在Apache Trafodion上的可视化
  • express如何解决request entity too large问题
  • JS字符串转数字方法总结
  • MaxCompute访问TableStore(OTS) 数据
  • python学习笔记-类对象的信息
  • Sass 快速入门教程
  • Swoft 源码剖析 - 代码自动更新机制
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 聚类分析——Kmeans
  • 开发基于以太坊智能合约的DApp
  • 老板让我十分钟上手nx-admin
  • 前端性能优化——回流与重绘
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用putty远程连接linux
  • 小试R空间处理新库sf
  • 一个完整Java Web项目背后的密码
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #laravel 通过手动安装依赖PHPExcel#
  • #QT(串口助手-界面)
  • (1) caustics\
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (4.10~4.16)
  • (LeetCode) T14. Longest Common Prefix
  • (pytorch进阶之路)扩散概率模型
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)Google的Objective-C编码规范
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)虚函数剖析
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Core 项目指定SDK版本
  • .NET 设计一套高性能的弱事件机制
  • .NET简谈设计模式之(单件模式)
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET企业级应用架构设计系列之技术选型