MacOS 上 bash 的奇怪行为不区分大小写

MacOS 上 bash 的奇怪行为不区分大小写
~/testing $ echo Hello > hello.txt
~/testing $ echo Goodbye > goodbye.txt
~/testing $ cat goodbye.txt hello.txt > HELLO.txt
^C
~/testing $ ls -l
total 9056
-rw-r--r--  1 user  user        8 25 Jul 16:21 goodbye.txt
-rw-r--r--  1 user  user  4631048 25 Jul 16:22 hello.txt
~/testing $ 

世界卫生大会?我在这里缺少一些东西。我是否缺少不敏感地销毁文件选项?为什么这看起来循环?

答案1

Mac OS X 默认情况下使用不区分大小写的文件系统。如果您想更改,则需要使用区分大小写的选项重新格式化磁盘。请注意,一些由主要供应商编写的程序<咳>Adobe</咳>、<咳>微软</咳>区分大小写的文件系统存在严重问题。

虽然文件系统不区分大小写,但所有文件都将以其自然大小写显示。即,如果您有一个名为+ (大写 H 然后制表hello.txt符)的文件,您将不会获得任何补全候选(除非您将 shell 设置为不敏感补全)。shiftHTab

答案2

cat goodbye.txt hello.txt > HELLO.txt

事件的顺序:

  1. shell 将 hello.txt 截断为零字节。
  2. cat 将goodbye.txt 的内容写入指向hello.txt 的stdout。
  3. cat 开始读取 hello.txt 并将其读取的内容写入到 stdout,后者仍指向 hello.txt。由于 cat 正在读取和写入同一文件,因此它永远不会到达文件末尾,并将继续添加到 hello.txt 直到文件系统已满。

答案3

OSX 中格式化磁盘的默认选项是 HFS+ Journaled(不区分大小写)。如果您需要这种行为,则必须明确将格式设置为区分大小写。

您所看到的行为是有意为之的。

相关内容