“for f in directory/*” 的默认顺序是什么?

“for f in directory/*” 的默认顺序是什么?

我想知道是否可以使用

for f in directory/*

是否会有一些默认的处理条目顺序(文件名、创建日期等?),或者它是非确定性的?

这可能很明显,但我找不到该信息。

答案1

ls directory/*该顺序将按照字典顺序(字母顺序)进行。它将与您在 Bash shell 提示符下输入的内容完全相同。

如果要按修改时间排序,可以使用ls -t。请参阅man ls其他排序选项。

答案2

directory/*首先由 shell (通常是 bash) 展开。运行echo directory/*将回显所有匹配的文件,bash 将首先按字典顺序对这些匹配的元素进行排序,然后将它们作为参数传递给echo,然后打印它们。

在运行 的情况下ls directory/*directory/*shell 首先会展开 ,然后将其作为 的参数列表呈现ls。 输出文件的顺序ls取决于提供给它的可选参数,这些参数允许根据其他标准(例如大小、修改时间等)输出文件列表,但这种排序是在二进制文件本身内部完成的ls,在 bash shell 传递按字典顺序排序的扩展参数列表之后。

相关内容