PowerShell中的“$($var)”和(“$var”)有什么区别

Fri*_*ave 4 powershell

谁能告诉我以下 PowerShell 命令之间有什么区别(如果有):

Set-ItemProperty -Path "$($var)" -Name $var2 -Value $var3
Run Code Online (Sandbox Code Playgroud)

Set-ItemProperty -Path ("$var") -Name $var2 -Value $var3
Run Code Online (Sandbox Code Playgroud)

$var 是一个注册表位置,即 HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion...

我还看到两者都用于 New-ItemProperty 中的 Path 参数

Ans*_*ers 6

"$($var)"$var在子表达式中输出变量的值,然后将该输出放入字符串中。然后将该字符串用作Set-ItemProperty语句中的参数。

("$var")将变量的值$var放在一个字符串中,并在一个分组表达式中计算它(类似于子表达式,但不允许多个语句)。分组表达式的输出(在本例中是字符串)然后作为Set-ItemProperty语句中的参数传递。

您的示例语句中也不需要。单独使用变量就足够了。

Set-ItemProperty -Path $var -Name $var2 -Value $var3
Run Code Online (Sandbox Code Playgroud)

$(...)如果要将简单变量以外的其他内容插入还包含其他文本的字符串,例如另一个语句的输出,则可以在字符串中使用子表达式 ( ):

"foo $(Get-Date) bar"
Run Code Online (Sandbox Code Playgroud)

对象属性的值:

"foo $($var.Foo) bar"
Run Code Online (Sandbox Code Playgroud)

或数组的一个元素:

"foo $($var[5]) bar"
Run Code Online (Sandbox Code Playgroud)

因为这些不能直接在字符串中使用。如果您需要将变量的值插入字符串中,您可以在没有子表达式的情况下执行此操作:

"foo ${var} bar"
Run Code Online (Sandbox Code Playgroud)

(...)如果您希望将表达式的输出用作语句的参数,则可以使用分组表达式 ( ):

Do-Something -Foo (Get-Date)
Run Code Online (Sandbox Code Playgroud)

仅将字符串放入子表达式中没有任何意义。