powershell:单引号字符串中的换行符?

powershell: newline in a single-quoted string?

在 powershell 中,双引号 " 表示“可扩展”字符串,类似于其他上下文中的“字符串插值”。单引号 ' 是不进行插值的字符串。

我很喜欢这种区别,因为它可以帮助我预测特定字符串的使用方式。

然而

根据 these MS docs仅当包含在双引号 (") 字符串中时才解释转义序列

这似乎暗示我不能在单引号字符串中放入换行符?

的确,PowerShell 的 verbatim strings'...',即 -引号)仅支持 one 转义序列:'',它允许您逐字嵌入 '

因此,您的选择是:

  • 或者:在你的'...'字符串.[=中嵌入一个逐字(实际)换行符22=]

  • 或者 - 这适用于您想要以编程方式而不是逐字生成的任何字符 - 使用 字符串连接 (+) 或通过 -fformat operator

    模板方法

以下示例展示了这些技术:

'--- verbatim'
# Note: If the enclosing script uses Windows-style CRLF newlines,
#       so will this string ("`r`n").
'line1
line2'

'--- concatenation'
# Note: In lieu of "`n" you may use [char] 10
#       For Windows-style CRLF newlines, use "`r`n" or + [char] 13 + [char] 10
'line1' + "`n" + 'line2'

'--- -f operator:
'line1{0}line2' -f "`n"

如果嵌入 verbatim 换行符是一个选项,您也可以使用 verbatim here-string 以获得更好的可读性,它具有not 的额外优势是必须转义嵌入的 ' 个字符:

# Here-string
@'
line1
line2
No escaping of ' needed.
'@

与常规逐字字符串一样,封闭脚本的换行格式(Windows风格的 CRLF 与 Unix 风格的 LF)决定了格式字符串中使用的换行符。