![](/img/trans.png)
[英]What's the difference between setInterval(func) and setInterval(function(){func()})
[英]Powershell: What's the difference between Alias and Function?
我正在设置我的 powershell 配置文件以创建常用命令的别名。 在 Microsoft 的文档中,它说,如果我想为带有参数的命令创建别名,我应该将别名的值设为 Function 来做到这一点。 . 但是,当我在命令行中键入 function 的名称时,它的工作原理与别名一样。
换句话说,在上图中,如果我键入CD32
,它的行为与我在命令行中键入Go
的行为相同
所以我的问题是:为什么我只能使用 function 时使用指向函数的别名? 两者之间有功能差异吗?
PowerShell 中的别名允许您为另一个命令定义替代名称。
与 POSIX 兼容的 shell 不同,例如bash
,您不能在其定义中包含直通 arguments - 您需要一个function 。
典型的用例是为方便交互调用定义一个简短的替代名称; 例如,PowerShell 的Get-Content
cmdlet 有一个内置的gc
别名。 PowerShell 甚至建议别名的命名约定,基于其已批准动词的官方短别名前缀,例如给定示例中Get
动词的g
。
另一个有问题的用途是定义为不同 shell 的命令命名的别名。 例如, PowerShell 为其Get-ChildItem
有一个内置的dir
别名,以cmd.exe
的(命令提示符的)内部dir
命令命名。 虽然这在从cmd.exe
转换时可能会有所帮助,但它仅适用于非常简单的调用,并且由于 PowerShell 的命令行语法和参数名称完全不同,很快就会出现问题。
另一个没有问题的用途是为其目录未列在路径 ( $env:PATH
) 中的外部可执行文件定义别名; eg, if you want to execute c:\path\to\foo.exe
as just foo
without having to add c:\path\to
to $env:PATH
, you can use Set-Alias foo c:\path\to\foo.exe
。
与 POSIX 兼容的 shell(例如bash
)不同,别名(总是)可用于脚本( *.ps1
文件),但出于稳健性和长期稳定性的考虑,不鼓励在脚本中使用别名。
正如预期的那样, function是一个命名的代码单元,可以接受 arguments 并且可以执行任意操作。
至于为function 定义别名是否有意义,如果您的命令的实现需要 function (由于需要的不仅仅是简单的名称映射):
如果您只需要一个(短)命令名称,您可以使用该名称直接定义 function - 不需要别名。
相比之下,如果您的 function 需要一个长名称,尤其是一个高级(类似于 cmdlet)的 function ,它遵循 PowerShell 的动词-名词命名约定(例如, Invoke-Foo
),并且您还需要一个短名称以方便交互(例如, foo
),您还必须使用该短名称为 function 定义一个别名(例如, Set-Alias foo Invoke-Foo
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.