我想知道是否可以使用
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 传递按字典顺序排序的扩展参数列表之后。