Kev*_*inD 27 syntax powershell string-interpolation
我在网上看过很多使用它的示例脚本.最近,我在一个关于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])"
Run Code Online (Sandbox Code Playgroud)
据我所知,$($taskTitle)
似乎相当于$taskTitle
.我错过了什么吗?有没有理由使用括号和额外的美元符号?
Ami*_*rge 35
语法有助于评估其中的表达式.
$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
Run Code Online (Sandbox Code Playgroud)
您可以在http://ss64.com/ps/syntax-operators.html上阅读更多内容
mkl*_*nt0 12
通过更多背景信息补充Amith George的有用答案:
据我所知,
$($taskTitle)
似乎相当于$taskTitle
.
事实上,在的情况下"..."
,一个扩展字符串(内插字符串):
您不需要$(...)
使用简单的变量引用,例如$taskTitle
或$env:HOME
${taskTitle}
或${env:HOME}
- 即,{...}
围绕标识符 - 以便消除变量名与字符串中后续字符的歧义.你需要$(...)
的任何东西:
"count is: $($var.Count)"
"path prefix: $($var + '/')"
"file names: $(Get-ChildItem *.txt | Select-Object -ExpandProperty Name)"
简而言之:
$(...)
...
除了简单的变量引用之外的任何东西都需要在里面" ",并且允许你在里面嵌入整个语句"..."
; 像往常一样,当评估字符串时,该$(...)
部分将替换为嵌入语句的(字符串化)输出.
如果您不想考虑何时何时$(...)
不需要,您可以选择始终使用它(例如$($taskTitle)
),但请注意,键入和视觉上"嘈杂"很麻烦.
$($var)
是不一样的$var
/${var}
,即如果$var
是一个集合(实现[System.Collections.IEnumerable]
)恰好只包含一个单一的项目 -见PetSerAl下面的评论.除非引用变量的/ embedded语句的值已经是一个字符串,否则它将使用.NET 方法进行字符串化,显而易见的是,支持文化敏感字符串化的类型使用不变文化进行字符串化,松散地说,就像美国一样 -英文格式; 例如,即使在十进制标记的文化中,总是产量; 看到我的这个答案更多..ToString()
"$(1.2)"
1.2
,
文件:
正式名称$(...)
是子表达式运算符,正如(简洁地)记录在案Get-Help about_Operators
,尽管那里的解释没有讨论运算符在可扩展字符串的上下文中的特定用法.
相反地,Get-Help about_Quoting_Rules
,其中讨论了字符串文字包括可膨胀的字符串,显示了实施例的$(...)
仅在可膨胀串的上下文.
归档时间: |
|
查看次数: |
19758 次 |
最近记录: |