OS X中的bash不区分大小写吗?


79

OS X上的bash命令是否区分大小写?我输入“哪个TR”,它显示/ usr / bin / TR,尽管那里没有这样的二进制文件。对于其他二进制文件,大写时也是一样。还是Terminal.app可能正在执行此翻译?如何关闭此功能?


出于好奇,您为什么要关闭此功能?
索伦Kuklau

这是一个引人注目的问题。Bash有nocaseglob选项来控制大小写是否在范围内匹配,但是这种小小的骗局比正常情况locale完成忽略情况 / nocaseglob
bmike

3
我想将其关闭的原因确实很愚蠢。在shell上工作时,我习惯于区分大小写。我只是担心此功能会使我绊倒。例如,我编写了一个bash脚本,错误键入了“ lS”;该脚本将在OSX上正常运行。我将其移到我的cenTOS框中,然后中断了。当然,这将很容易检测和修复,但是如果我可以使脚本在两个系统之间以相同的方式工作,则可以完全避免这种情况。我是偶然发现的,到目前为止还没有什么麻烦,因此我可能不会仅为此目的而进行更改文件系统的练习。
2011年

5
您要关闭此功能的原因是,不区分大小写会导致某些应用程序出现问题,例如SVN。不区分大小写的globbing很有用,但是如果创建一个名为“ Foo”的文件,SVN会非常混乱,然后存储库会以某种方式创建对“ foo”的引用。

禁用的另一个原因:自1980年以来,我的路径中已有脚本〜/ bin / CC。cc加上一些令人愉快的默认值。它从UNIX v6到v7,Eunice,BSD 4.1、4.2、4.3,SVr4,Xenix,Gould UTX,Linux,cygwin等都可以使用,并且在MacOS上首次失败,无限递归。
Krazy Glew,2015年

Answers:


94

这实际上是磁盘文件系统的功能,而不是bash或Terminal.app。

HFS +(Mac文件系统)通常配置为不区分大小写,保留大小写。这意味着文件系统将考虑fooFoO保持相同,但是当您创建新文件时,它将记住哪些字母大写,哪些字母不大写。

使用HFS +格式化磁盘时,可以选择文件系统是否区分大小写。如果选择使用UFS(Unix FileSystem)格式化,则始终区分大小写,即AFAIK。

要检查磁盘是否区分大小写,请运行:

 diskutil info <device>

例如:

 diskutil info disk0s2

寻找Name:线。如果它读取类似的内容,Mac OS Extended (Case-sensitive, Journaled)则表示它区分大小写。如果它只是读取Mac OS Extended(不读取Case-sensitive),则仅保留大小写,而不区分大小写


6
在Unix之外,保留大小写的情况并不罕见。例如,NTFS类似于:默认情况下不区分大小写,但是您可以对其进行格式化。我还认为,不区分大小写是默认情况,是通过Mac OS 9来实现的,但是许多Mac和Windows开发人员在这方面很懒,并且不关心正确的大小写,因此几乎不可能切换为区分大小写作为默认值,它破坏了许多应用程序。来自Unix,一开始我也觉得很奇怪。
DarkDust

1
我必须承认,我从未使用过Classic Mac OS,所以是在猜测。无论哪种方式,这都是答案,DarkDust比我说得更好,所以我认为应该接受这一点。

6
由于可用性的原因,Mac OS的每个版本都不区分大小写但保留。尽管UNIX倾向于精度(文件名的逐字节比较),但对于最终用户来说,这可能是一个可用性梦night,他们不小心保存了“ Resume”和“ REsume”,然后在打开错误的版本并且所有更改都消失了时感到困惑。
丹·乌迪

2
另一方面,当在命令行中键入“ HEAD”导致执行程序/ usr / bin / head(显示文件的第一行)而不是/ usr / local时,这可能是“可用性噩梦” / bin / HEAD(来自LWP:发出HTTP“ HEAD”请求)。
TML

2
认为每个大写字母都有一个小写字母等价字符,反之亦然,这在英语程序员中很常见,并且与语言环境无关。我不知道土耳其语采用了什么解决方案,其中虚线的小写字母i对应于DOTTED大写字母İ,而无点的大写字母I对应于DOTLESS小写字母ı,但是任何解决方案都不好。那德国人ß经常用2 Ss 大写字母呢?并在大写时经常忽略的口音?而且...区分大小写消除了所有这些头痛问题。
Walter Tross 2015年

5

看一下您的文件系统,因为HFS上存在区分大小写和不区分大小写的变体。默认值是不区分大小写的,在这种情况下,它不是BASH的情况,而是基础文件系统。您可以使用区分大小写的选项格式化备用USB记忆棒,然后复制文件以重复测试等进行测试。



1

Bash绝对区分大小写。

我只是在终端上输入了“ whoami”,然后按下了大写锁定按钮。

我收到的回应与“ WHOAMI”完全不同。

我可以看到存在带有“哪个”的WHOAMI命令,但是找不到带有“ ls”的命令。


4
这不是区分大小写的shell,而是whoami程序本身。它实际上是与相同的程序id,但是它检查运行时使用id -un的名称,如果以“ whoami”的名称运行,则使用不同的输出(等于)。检查区分大小写。比较器的输出idWHOAMIWhOaMiWhoAmI,等。此外,比较器的输出ls -li /usr/bin/whoamiVS ls -li /usr/bin/WHOAMI,并注意inode编号(输出中列出的第一件事)是相同的-他们是指定完全相同的文件的两个不同的方法。
Gordon Davisson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.