fra*_*fra 29 syntax powershell string-interpolation
我总是使用以下语法来确保变量在字符串中展开:
"my string with a $($variable)"
我最近遇到了以下语法:
"my string with a ${variable}"
它们是等价的吗?有什么区别吗?
mkl*_*nt0 46
补充marsze 的有用答案:
${...}如果变量名称包含特殊字符(例如空格、 或),(将变量名称括在{和 中})确实总是必要的。.-
_而且-令人惊讶且有问题- ?。:被不变地解释为终止PowerShell的驱动器的参考,在的情况下命名空间变量符号,而不管{...}外壳使用或需要(例如,在$env:USERNAME或${env:USERNAME},env是指PowerShell驱动器代表所有环境变量)。在 内的字符串扩展(插值)上下文中"...",还有另一个使用 的${...}原因,即使变量名本身不需要它:
如果您需要直接在非空白字符之后描述变量名称,特别是包括::
$foo = 'bar'  # example variable
# INCORRECT: PowerShell assumes that the variable name is 'foobarian', not 'foo'
PS> "A $foobarian."
A .  # Variable $foobarian doesn't exist -> reference expanded to empty string.
# CORRECT: Use {...} to delineate the variable name:
PS> "A ${foo}barian."
A barbarian.
# INCORRECT: PowerShell assumes that 'foo:' is a *namespace* (drive) reference
#            (such as 'env:' in $env:PATH) and FAILS:
PS> "$foo: bar"
Variable reference is not valid. ':' was not followed by a valid variable name character. 
Consider using ${} to delimit the name.
# CORRECT: Use {...} to delineate the variable name:
PS> "${foo}: bar"
bar: bar
有关PowerShell 字符串扩展规则的全面概述,请参阅此答案。
请注意,在将不带引号的参数传递给命令的上下文中,当隐式应用字符串扩展时,您需要相同的技术;例如:
# INCORRECT: The argument is treated as if it were enclosed in "...",
#            so the same rules apply.
Write-Output $foo:/bar
# CORRECT
Write-Output ${foo}:/bar
最后,一个有点晦涩的替代方法是`-escape 变量名后的第一个字符,但问题是这仅适用于不属于转义序列的字符(请参阅参考资料about_Special_Characters):
# OK: because `: is not an escape sequence.
PS> "$foo`: bar"
bar: bar
# NOT OK, because `b is the escape sequence for a backspace character.
PS> "$foo`bar"
baar # The `b "ate" the trailing 'r' of the variable value
     # and only "ar" was the literal part.
der*_*can 27
请注意,这$()对于 json 对象很有帮助:
"My json property is $($jsonObj.property)"
${variable} 是包含特殊字符的变量名称的语法。
(请参阅about_Variables -> 包含特殊字符的变量名称 )
例子:
${var with spaces} = "value"
"var with spaces: ${var with spaces}"
所以在你的情况下,它与简单地写作基本相同 $variable
| 归档时间: | 
 | 
| 查看次数: | 20806 次 | 
| 最近记录: |