powershell - 为什么在这个例子中我需要子表达式操作符?
问题描述
一个教科书的例子说
trap {"trapped : $($error[0])"; break}
在 PowerShell 中。为什么我需要子表达式运算符$( )
?作为初学者,我会看到
trap {"trapped : $error[0]"; break}
PowerShell 在带双引号的字符串中进行变量替换就足够了。
当然后者是行不通的。为什么?
解决方案
在可扩展字符串(带有外部双引号或已转换为字符串的字符串)内部,变量名被替换为它们的值。此过程忽略索引 ( $var[0]
) 和成员访问 ( $var.property
),因为变量名[1]中不允许使用.
和。[
# Example 1
$var = 'first','second'
$var[1] # retrieves element 1 correctly
second
"$var[1]" # converts $var into a string and then outputs [1] literally
first second[1]
# Example 2
$var = [pscustomobject]@{prop = 'value'}
$var.prop # outputs value as expected
"$var.prop" # converts $var to string and then outputs .prop literally
@{prop=value}.prop
双引号字符串确实评估表达式,但必须告诉解析器表达式包含什么。输入子表达式运算符$()
。中的代码()
被视为表达式。现在可以识别、评估表达式并将其结果插入到字符串中。
$var = [pscustomobject]@{prop = 'value'}
"$($var.prop)" # outputs value
value
有关其他信息,请参阅About_Quoting_Rules。
[1]:变量名中可以使用特殊字符。这在语法的情况下是允许的${variableName}
。这种特殊语法在双引号字符串中被正确替换。
推荐阅读
- r - 使用group_by和summary时如何输出全部信息
- javascript - 带拖放功能的角度自动滚动
- asp.net - HTTP 错误 404.17 - 未找到 - .NET - IIS 10
- java - [android]如何使用 'ernestoyaquello' 发布的垂直步进器 github 代码
- python - 更改矩形的 X 值实际上不会在 GUI 中移动它
- bash - 通过本地 bash 脚本在 ssh 服务器中导航
- sql - AWS Athena Table 每一列的行数
- javascript - 单击引导选择选择器的下拉菜单时关注搜索框输入
- go - 与 reflect.StructTag.Get 不兼容
- flutter - 无法在颤动的谷歌地图上设置我的位置