为什么脚本列出的目录首先以大写字母开头,然后以全小写字母开头?

为什么脚本列出的目录首先以大写字母开头,然后以全小写字母开头?

该线程是以下内容的扩展:列出目录的基本脚本([:发现:意外操作符)

当我执行脚本时:

for item in *
do
   if [ -d "$item" ]
   then
      echo "$item"
   fi
done

它列出了系统安装过程中自动组装的文件夹(桌面、文档、下载)或自动安装的应用程序(Dropbox),然后是我的(dosgames),而不是按字母顺序排列它们(桌面、文档、dosgames、下载、Dropbox)。

如果检查的是共同特征(-d),为什么它要运行两个单独的检查?

输出:

Dokumenty
Dropbox
Muzyka
Obrazy
Pobrane
Publiczny
Pulpit
Szablony
Wideo
dosgames
learning_linux
new
tset

我使用的是波兰语版本,因此目录名称如此。然而,这些都是默认系统目录,如果不是,显然不是(即 Dropbox、dosgames)

答案1

shell 根据区域设置您已设置。具体来说,它是LC_COLLATE控制字符串排序方式的变量。就您而言,它会像在POSIXC语言环境中一样先对大写字符进行排序,然后再对小写字符进行排序(即按字符的 ascii 值排序)。

$ mkdir Dokumenty dosgames Dropbox Muzyka learning_linux
$ LC_COLLATE=en_US.utf-8; echo */
Dokumenty/ dosgames/ Dropbox/ learning_linux/ Muzyka/
$ LC_COLLATE=C; echo */
Dokumenty/ Dropbox/ Muzyka/ dosgames/ learning_linux/

相关内容