它rm
本身并不提供排序的性质,它是shell扩展.如果您要键入rm *
,shell会将其扩展为:
rm aaa bbb ccc
Run Code Online (Sandbox Code Playgroud)
而rm
就从来没有看到一个*
说法.顺便说一下,我不确定所有 shell的排序行为都是有保证的,但bash
根据手册页,它肯定是有效的:
...替换为按字母顺序排序的与模式匹配的文件名列表.
该命令rm -rf *
是一个有点奇怪的混合大小写的情况,因为即使shell对*
条目进行排序,它仍然仅用于第一级条目.
因此rm -rf *
可能扩展到:
rm -rf aa_dir bb_dir cc_dir
Run Code Online (Sandbox Code Playgroud)
但这完全取决于rm
内部如何处理这些目录下的条目的处理顺序(尽管显然,可以安全地确定目录中的所有条目将在目录本身之前被删除).
很可能它只是使用readdir()
或类似的东西,它将根据它们如何存储在目录文件中而不是按字母顺序排序来排序.
在任何情况下,它们被删除的顺序可能无关紧要 - 假设权限允许,它们最终都将被删除.