假设我有以下片段:
$assoc = New-Object PSObject -Property @{
Id = 42
Name = "Slim Shady"
Owner = "Eminem"
}
Write-Host $assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner
我希望这段代码显示:
42-Slim Shady-阿姆
但相反,它显示:
42+-+斯利姆·沙迪+-+埃米纳姆
这让我觉得+运算符不适合连接字符串和变量。
您应该如何使用PowerShell实现这一点?
While表达式:
"string1" + "string2" + "string3"
将连接字符串,您需要在括号前放一个$,使其在传递给PowerShell命令时作为单个参数求值。例子:
Write-Host $( "string1" + "string2" + "string3" )
另外,如果您希望它跨越多行,则需要在行的末尾使用尴尬的反引号语法(反引号右侧没有空格或字符)。
例子:
Write-Host $(`
"The rain in " +`
"Spain falls mainly " +`
"in the plains" )`
-ForegroundColor Yellow
(事实上,我认为PowerShell当前的实现有点错误,因为它在括号之间需要不必要的反引号。如果Microsoft只是遵循Python或Tcl括号规则,允许您在开始括号和结束括号之间插入任意多的换行符,那么它们将解决大多数人们不喜欢的PowerShell与换行符相关的问题n、 以及串的串联。
我发现有时可以在括号之间的换行符上去掉反引号,但如果它能起作用,那真的很难预测。。。最好只添加反引号。)
单引号和双引号之间有区别。(我正在使用PowerShell 4)。
你可以这样做(正如本杰明所说):
$name = 'Slim Shady'
Write-Host 'My name is'$name
-> My name is Slim Shady
或者您可以这样做:
$name = 'Slim Shady'
Write-Host "My name is $name"
-> My name is Slim Shady
单引号用于文字,请按如下方式输出字符串。双引号用于需要进行某些预处理时(例如变量、特殊字符等)
So:
$name = "Marshall Bruce Mathers III"
Write-Host "$name"
-> Marshall Bruce Mathers III
鉴于:
$name = "Marshall Bruce Mathers III"
Write-Host '$name'
-> $name
(我发现如何:转义字符、分隔符和引号很适合参考)。