Powershell 选项卡完成:它如何决定建议哪个文件?

Powershell 选项卡完成:它如何决定建议哪个文件?

我有两个文件 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

相关内容