为什么在 Windows 中访问环境变量有两种标准,而它们的调用都指向同一个环境变量?

为什么在 Windows 中访问环境变量有两种标准,而它们的调用都指向同一个环境变量?

我可以$env:<env-name>在 Powershell 中使用它来访问环境变量,并且在cmdWindows 的所有其他部分中我都可以使用%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)。

相关内容