假设我有以下代码段:
$assoc = New-Object psobject -Property @{
Id = 42
Name = "Slim Shady"
Owner = "Eminem"
}
Write-host $assoc.Id + " - " + $assoc.Name + " - " + $assoc.Owner
我希望这段代码显示:
42 - Slim Shady - Eminem
但相反它显示:
42 - Slim Shady - Eminem
这让我觉得 +
运算符不适合连接字符串和变量 .
你应该如何使用PowerShell来解决这个问题?
16 回答
您需要将表达式放在括号中,以阻止它们被视为cmdlet的不同参数:
似乎没有人提到单引号和双引号之间的区别 . (我使用的是PowerShell 4) .
你可以这样做(正如@Ben所说):
或者你可以这样做:
单引号用于文字,请输出与此字符串完全相同的字符串 . 双引号用于何时需要进行一些预处理(例如变量,特殊字符等)
所以:
鉴于:
(http://ss64.com/ps/syntax-esc.html我觉得很好参考) .
试试这个:
尝试在括号中包装您想要打印的任何内容:
您的代码被解释为传递给
Write-Host
的许多参数 . 将其括在括号内将连接值,然后将结果值作为单个参数传递 .这是另一种方式:
一种方法是:
另一个是:
或者只是(但我不喜欢它;)):
请参阅Windows PowerShell Language Specification Version 3.0,p34,子表达式扩展 .
要连接两个字符串以存储在函数中的变量/用途中,可以使用-join .
例如 .
将“John”分配给$ name .
所以输出,在一行:
我只是想用另一种方法来使用.NET String.Format:
来自What To Do / Not to Do in PowerShell: Part 1:
虽然表达:
将连接字符串 . 您需要在括号前面加上一个$,以便在传递给powershell命令时将其作为单个参数进行求值 . 例:
作为奖励,如果您希望它跨越多行,那么您需要在行尾使用ackward反引号语法(在反引号的右侧没有任何空格或字符) . 例:
(实际上,我认为Powershell目前实现有点错误,需要在括号之间进行不必要的反差 . 如果微软只遵循“Python”或“TCL”括号规则,允许您在启动和启动之间放置任意数量的换行符 . 结束括号然后他们将解决大多数人们不喜欢与线条延续相关的PowerShell的问题,以及字符串的连接 . 我发现你可以在括号之间的线条延续上留下后面的勾号,但是如果它能起作用真的很不稳定和不可预测..最好只添加反引号 . )
Write-Host也可以这样连接:
这是最简单的方法,恕我直言 .
连接字符串就像在DOS时代一样 . 这对于日志记录来说是一个大问题,所以你去:
这些答案看起来都很复杂 . 如果您在PowerShell脚本中使用它,则可以执行以下操作:
它会输出
请注意如何在单词之间放置空格
另一种选择是:
“最佳”方法可能是C.B.建议的方法:
每次我使用PowerShell后,我似乎都在努力解决这个问题(以及许多其他不直观的事情),所以我现在选择: