我可以$env:<env-name>
在 Powershell 中使用它来访问环境变量,并且在cmd
Windows 的所有其他部分中我都可以使用%env-name%
它来访问它们。
如果我们只使用一个操作系统,为什么会有两个不同的标准?
答案1
CMD 和 Powershell 是不同时代的不同技术。大多数 CMD 语法规则可以追溯到 80 年代。
Powershell 是一个完全不同的 shell,旨在与完全不同类别的软件(即 bash)竞争。因此,它需要更复杂的语法,而 MS 借此机会实现了一个语法,既提高了效率,又赋予 PS 一种特殊的“风味”,就像其他所有主要 shell 一样。
你不妨问为什么 python 和 c# 使用不同的语法。
答案2
在 CMD 中你确实只是在 PowerShell 中访问环境变量时,您正在使用整个环境驱动器。它背后有更多的逻辑,这为您提供了更多机会和更大的灵活性。您可以在 PowerShell 中阅读有关环境变量的更多信息这里和这里. 仅举几个例子:
环境驱动器Env
列在所有其他驱动器旁边。执行以下 cmdlet 即可查看:
Get-PSDrive
您可以像访问文件系统驱动器一样访问此驱动器(大多数情况下)。例如,您可以通过执行以下命令列出所有环境变量:
Get-ChildItem Env:
您还可以通过执行以下命令获取特定的环境变量:
Get-Item Env:TMP
要获取值,您可以执行:
(Get-Item Env:TMP).Value
或者(正如您已经做的那样):
$Env:TMP
因此,PowerShell 使用完全不同的技术来处理环境变量。这就是为什么它使用不同的语法,即定义顺便说一下如下:
$Env:TMP
在此语法中,美元符号 (
$
) 表示变量,驱动器名称 (Env:
) 表示环境变量,后跟变量名 (TMP
)。