假设我有以下片段:

$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实现这一点?


当前回答

写主机也可以这样连接:

Write-Host $assoc.Id" - "$assoc.Name" - "$assoc.Owner

这是最简单的方法,IMHO。

其他回答

一种方法是:

Write-Host "$($assoc.Id)  -  $($assoc.Name)  -  $($assoc.Owner)"

另一个是:

Write-Host  ("{0}  -  {1}  -  {2}" -f $assoc.Id,$assoc.Name,$assoc.Owner )

或者只是(但我不喜欢;):

Write-Host $assoc.Id  "  -  "   $assoc.Name  "  -  "  $assoc.Owner

从PowerShell中的What To Do/Not To Do:第1部分:

$id = $assoc.Id
$name = $assoc.Name
$owner = $assoc.owner
"$id - $name - $owner"

我只想用另一种方式使用.NET字符串来实现这一点。格式:

$name = "Slim Shady"
Write-Host ([string]::Format("My name is {0}", $name))

尝试将要打印的内容包装在括号中:

Write-Host ($assoc.Id + "  -  "  + $assoc.Name + "  -  " + $assoc.Owner)

您的代码被解释为传递给Write Host的许多参数。将其包装在括号内将连接值,然后将结果值作为单个参数传递。

这些答案看起来都很复杂。如果在PowerShell脚本中使用此功能,则只需执行以下操作:

$name = 'Slim Shady'
Write-Host 'My name is'$name

它将输出

我叫斯利姆·沙迪

注意单词之间是如何放置空格的