我有两个文件 functions.txt 和 functions.ps1。
在 PS 命令提示符下,当我在目录中按下 Tab 键时,出现的第一个选择是“functions.txt”。
但是,如果我输入“del”,然后按 tab 键,出现的第一个选择是“functions.ps1”。
这看起来是一致的。
这背后是否存在某种逻辑,是巧合,还是邪恶的小鬼试图诱骗我删除错误的文件?
答案1
如果你运行:
gci | sort
在目录中,你会看到它对字符(。,$,!等)AZ&az进行排序,据我所知,
Shell> .\ **TAB**
在该目录中gci | 排序按该顺序(忽略直到最后的字符)。
我还假设它先对文件名进行排序,然后再对扩展名进行排序。因此,对于您的示例,functions.ps1 位于 functions.txt 之前。我看到 del 的行为相同标签, 要不就 。\标签
这似乎与以下文件示例目录一致:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/10/2012 2:51 PM 0 foo1
-a--- 2/10/2012 2:52 PM 0 foo1.ps1
-a--- 2/10/2012 2:52 PM 0 foo1.txt
-a--- 2/10/2012 2:51 PM 0 foo2
-a--- 2/10/2012 2:51 PM 0 foo2.ps1
-a--- 2/10/2012 2:52 PM 0 foo2.txt
答案2
答案似乎是,根据情况,制表符补全确实使用两种不同的算法来决定哪个文件先出现。
在此示例中,文件“ab”在文件“aa”之前创建,并且“a”(第三行)上的制表符补全显示“ab”(首先创建的文件)。
PS P:\> echo hello > ab
PS P:\> echo hello > aa
PS P:\> .\ab
但是在“del”之后对“a”进行制表符补全会发生这种情况:
PS P:\> del .\aa
但是,以相反的方式创建文件会产生以下结果:
PS P:\> echo hello > aa
PS P:\> echo hello > ab
PS P:\> .\aa
在“del”之后对“a”进行制表符补全也显示“aa”:
PS P:\> del .\aa