В чем разница между "$ ($ var)" и ("$ var") в PowerShell - PullRequest
2 голосов
/ 17 октября 2019

Может кто-нибудь сказать мне, в чем разница, если таковая имеется, между следующими командами PowerShell:

Set-ItemProperty -Path "$($var)" -Name $var2 -Value $var3

и

Set-ItemProperty -Path ("$var") -Name $var2 -Value $var3

$ var - это местоположение реестра, то есть HKLM:\ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion ...

Я также видел, как они используются для параметра Path в New-ItemProperty

1 Ответ

4 голосов
/ 17 октября 2019

"$($var)" выводит значение переменной $var в подвыражении, а затем помещает этот вывод в строку. Затем строка используется в качестве аргумента в операторе Set-ItemProperty.

("$var") помещает значение переменной $var в строку и оценивает ее в выражении группировки (аналогично подвыражению, но нене допускайте многократных заявлений). Выходные данные из выражения группировки (которое в данном случае является строкой) затем передаются в качестве аргумента в операторе Set-ItemProperty.

Ничего не требуется в вашем примере оператора. Использование переменной само по себе является достаточным.

Set-ItemProperty -Path $var -Name $var2 -Value $var3

Вы бы использовали подвыражение ($(...)) в строке, если вы хотите вставить в строку что-то, кроме простой переменной, в строку с другим текстом какнапример, вывод другого оператора:

"foo $(Get-Date) bar"

значение свойства объекта:

"foo $($var.Foo) bar"

или элемента массива:

"foo $($var[5]) bar"

потому что иначе они не могут быть использованы непосредственно в строке. Если вам нужно вставить значение переменной в строку, вы можете сделать это без подвыражения:

"foo ${var} bar"

Вы бы использовали группирующее выражение ((...)), если вы хотите вывод выраженияиспользуется в качестве аргумента оператора:

Do-Something -Foo (Get-Date)

Вставка только строки в подвыражение не имеет никакого смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...