为标准 Unix 实用程序命名的纯 Windows版本中的内置别名被有意排除在跨平台版本之外,以免影响(覆盖)它们。
注意:从 PowerShell Core v6.0.0-alpha.10 开始就是这样,但是这个设计决定引起了争议 - 在这里找到讨论。一个值得注意的缺陷是 PowerShell 在调用外部
实用程序
时不执行 globbing ,因此,例如,在 Bash 中,类似的东西不会像在 Bash 中那样工作。ls *.txt
ls
因此, Windows 原生版本中内置的alias未内置于 Linux 和 macOS 版本中,因为标准实用程序/bin/ls
应该优先。
相比之下, - 由于与任何标准 Unix 实用程序名称不冲突 - 在所有dir
版本中都是内置别名(并且在 Windows 上指的是)。Get-ChildItem
当 PowerShell 仅适用于 Windows 时,添加诸如ls
(for Get-ChildItem
) 和cat
(for Get-Content
) 之类的别名是对来自 Unix 背景的人们的一种认可。
在 Windows 上,这些命令名称没有预定义的含义,但在类 Unix 系统上,它们会影响标准实用程序 (CLI),从而导致潜在的意外行为。
安全、便携的方法是坚持:
- 使用完整的 cmdlet 名称而不是别名。
- 和/或仅基于cmdlet名称使用别名(而不是基于旧命令名称,例如
ls
or dir
)。
PowerShell 具有从 cmdlet 名称派生的别名的命名约定,将每个批准的动词(例如Get-
and Copy-
)映射到批准的别名前缀(例如g
and cp
) - 请参阅https://msdn.microsoft.com/en-us/library/ms714428( v=vs.85).aspx。
如果对给定命令名称所指的内容有疑问,请使用Get-Command <name>
(或gcm <name>
)。