我正在设置我的 powershell 配置文件来创建常用命令的别名。 在微软的文档中它说,如果我想为带有参数的命令创建别名,我应该将别名的值设置为执行此操作的函数。。但是,当我在命令行中输入函数名称时,它的工作方式与别名一样。
换句话说,在上图中,如果我输入
CD32
,它的行为就像我在命令行中输入Go
一样
所以我的问题是:当我可以只有一个函数时,为什么要使用指向函数的别名?两者之间有功能差异吗?
别名允许您为另一个命令定义替代名称。
bash
)不同,你不能在其定义中包含传递参数 - 你需要一个函数来实现它(见下文)。
典型用例是定义一个短替代名称,以实现方便交互调用;例如,PowerShell 的 gc
cmdlet 有一个内置的
Get-Content
别名。 PowerShell 甚至建议别名的命名约定,基于其批准的动词的官方短别名前缀,例如给定示例中
g
动词的
Get
。
有问题的用途是定义为不同 shell 命令命名的别名;例如,PowerShell 的 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
)不同,别名are(总是)可以在 scripts(
*.ps1
文件)中使用,但出于健壮性和长期性的考虑,不鼓励在脚本中使用它们。期限稳定性。
,如果命令的实现需要一个函数(因为需要的不仅仅是简单的名称映射): 如果您需要的只是命令的
一个定义您的函数 - 无需别名。 相比之下,如果您的函数需要一个
长(例如,Invoke-Foo
),并且您还需要一个短名称 为了方便交互而命名(例如,
foo
),您还必须使用该短名称为该函数定义一个别名(例如,Set-Alias foo Invoke-Foo
)。