我已经看到了一些示例脚本的在线使用此。 最近,我看到它在脚本的自动化TFS :
[string] $fields = "Title=$($taskTitle);Description=$($taskTitle);Assigned To=$($assignee);"
$fields += "Area Path=$($areaPath);Iteration Path=$($iterationPath);Discipline=$($taskDisciplineArray[$i]);Priority=$($i+1);"
$fields += "Estimate=$($taskEstimateArray[$i]);Remaining Work=$($taskRemainingArray[$i]);Completed Work=$($tasktaskCompletedArray[$i])"
从我可以告诉, $($taskTitle)
似乎是等同于$taskTitle
。 我缺少的东西吗? 没有任何理由使用括号和额外的美元符号?
语法有助于评估它里面的表达。
$arr = @(1,2,3)
$msg1 = "$arr.length"
echo $msg1 # prints 1 2 3.length - .length was treated as part of the string
$msg2 = "$($arr.length)"
echo $msg2 # prints 3
你可以阅读更多的http://ss64.com/ps/syntax-operators.html
为了补充Amith乔治有用的答案了更多背景信息 :
从我可以告诉, $($taskTitle)
似乎是等同于$taskTitle
。
事实上,在的情况下"..."
,一个可扩展的字符串 (插值字符串):
简而言之:
$(...)
里面的“ ...
”,需要比简单的变量引用任何其他,并允许你里面嵌入整个语句 "..."
; 像往常一样,当字符串被评估时, $(...)
部分替换为嵌入语句(S)(字符串化) 输出 。
如果你不想想想,当$(...)
是和是不需要的,你可以选择一直使用它(例如, $($taskTitle)
但要注意,它的繁琐输入和视觉“吵”。
- 警告 :存在边缘的情况下的行为
$($var)
是不一样的$var
/ ${var}
即如果$var
是集合 (实施[System.Collections.IEnumerable]
这种情况发生只包含一个项目 -见PetSerAl下面的评论。
除非引用变量/嵌入语句的值已经是一个字符串,它使用的是.NET 字符串化 .ToString()
方法 ,与支持文化敏感的字串类型字符串化与不变的文化 ,严格意义上显着的扭曲,就像美国英语格式; 例如, "$(1.2)"
总是产生1.2
,即使在培养物中,其中,
是十进制标记; 看到这个答案我的更多。
文档 :
本作的官方名称$(...)
是子表达式运算符 ,如(简洁)记录在Get-Help about_Operators
,虽然解释有没有讨论运营商在扩张字符串上下文中的具体运用。
相反, Get-Help about_Quoting_Rules
,其中讨论了字符串文字,包括可扩展的字符串,显示的例子 $(...)
只在扩张的字符串的情况下使用。