该线程是以下内容的扩展:列出目录的基本脚本([:发现:意外操作符)
当我执行脚本时:
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
控制字符串排序方式的变量。就您而言,它会像在POSIX
或C
语言环境中一样先对大写字符进行排序,然后再对小写字符进行排序(即按字符的 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/