我设置我的Powershell配置文件以创建常用命令的别名。 On Microsoft's documentation说,如果我想为带有参数的命令创建别名,则应将别名的值设置为执行此操作的函数。。但是,当我在命令行中键入该函数的名称时,它和别名一样有效。
换句话说,在上图中,如果我输入CD32
的行为与在命令行中输入Go
的行为相同
所以我的问题是:当我只有一个函数时,为什么要使用指向函数的别名?两者之间是否存在功能差异?
答案 0 :(得分:2)
PowerShell中的 别名 允许您为另一个命令定义 另一个名称 。
与bash
这样的POSIX兼容外壳不同,您不能在其定义中包括传递参数-您需要一个功能 。
典型用例是为交互式调用的便捷性 定义一个 short 替代名称;例如,PowerShell为其gc
cmdlet具有内置的Get-Content
别名。 PowerShell甚至根据其approved verbs的官方短别名前缀,例如给定示例中g
动词的Get
,建议使用别名命名约定。
有问题的另一种用法是定义为不同shell的命令命名的别名。例如,PowerShell为其dir
有一个内置的Get-ChildItem
别名,以cmd.exe
(命令提示符)的内部dir
命令命名。从cmd.exe
过渡时这可能会有所帮助,但它只能在非常简单的调用中运行,并且由于PowerShell的根本语法不同和参数名称不同而很快成为问题。
另一个 problematic 用途是为目录未在路径($env:PATH
)中列出的外部可执行文件定义别名。例如,如果您只想c:\path\to\foo.exe
来执行foo
,而不必向c:\path\to
添加$env:PATH
,则可以使用Set-Alias foo c:\path\to\foo.exe
。
与POSIX兼容的shell(例如bash
)不同,别名 (总是)可用于脚本(*.ps1
文件) ,但是出于健壮性和长期稳定性的考虑,它们在脚本中的使用已被削弱。
功能 ,正如所期望的那样,是一个命名的代码单元,可以接受参数并可以执行任意操作。