我设置了我的 powershell 配置文件来创建常用命令的别名。 On Microsoft's documentation它说,如果我想为带有参数的命令创建别名,我应该将别名的值设为执行此操作的函数。 .但是,当我在命令行中键入函数的名称时,它与别名一样有效。
换句话说,在上图中,如果我输入 CD32
它的行为与我输入 Go
的行为相同在命令行中
所以我的问题是:当我可以拥有一个函数时,为什么要使用指向函数的别名?两者之间有功能差异吗?
最佳答案
bash
, 你不能在它的定义中包含传递参数——你需要一个函数来实现 .gc
它的别名 Get-Content
小命令。 PowerShell 甚至推荐了别名的命名约定,基于其 approved verbs 的官方短别名前缀。 ,例如 g
为 Get
给定例子中的动词。dir
它的别名 Get-ChildItem
,以 cmd.exe
命名的(命令提示符)内部 dir
命令。虽然这在从 cmd.exe
过渡时可能会有所帮助,它仅适用于非常简单的调用,并且由于 PowerShell 根本不同的命令行语法和不同的参数名称,它很快就会出现问题。$env:PATH
);例如,如果你想执行 c:\path\to\foo.exe
就像foo
无需添加 c:\path\to
至 $env:PATH
,您可以使用 Set-Alias foo c:\path\to\foo.exe
.bash
, 别名(总是)在脚本( *.ps1
文件)中可用,但为了健壮性和长期稳定性,不鼓励在脚本中使用它们。至于为函数定义别名是否有意义 ,如果您的命令的实现需要一个函数(因为需要的不仅仅是一个简单的名称映射):
Invoke-Foo
),并且您还需要一个简短的名称以方便交互(例如, foo
),您还必须使用该简短名称为该函数定义别名名称(例如, Set-Alias foo Invoke-Foo
)。关于windows - Powershell:别名和函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63291583/