bash FOR IN 循环以什么顺序拾取文件夹中的文件?

Kos*_*hur 8 shell wildcards for

假设我有一个 for in 循环:

for i in /apps/textfiles/*.txt
do
do something
done
Run Code Online (Sandbox Code Playgroud)

现在说我在/apps/textfiles/ 中有 50 个文件

将按什么顺序选取文件?

Arm*_*ius 8

Bash 中的文件名扩展按字母顺序排序

来自 Bash 手册:

Bash 扫描每个单词中的字符 ' *'、' ?' 和 ' ['。如果出现这些字符中的一个,则该单词被视为一个模式,并替换为与该模式匹配的按字母顺序排序的文件名列表 [...]。

在这里,您的通配上下文是for循环的一部分并没有什么区别。

请注意,字母排序仍遵循LC_COLLATE变量定义的整理顺序:

LC_COLLATE

此变量确定在对文件名扩展结果进行排序时使用的整理顺序,并确定文件名扩展和模式匹配中的范围表达式、等价类和整理序列的行为(请参阅文件名扩展)。

  • `LC_COLLATE=C` 是 ASCIIbetical,尝试像这样的 `seq 32 127|awk '{printf("%c\n",$1)}' | 是有启发性的。LC_COLLATE=en_US 排序` (2认同)