powershell:单引号字符串中的换行符?
powershell: newline in a single-quoted string?
在 powershell 中,双引号 "
表示“可扩展”字符串,类似于其他上下文中的“字符串插值”。单引号 '
是不进行插值的字符串。
我很喜欢这种区别,因为它可以帮助我预测特定字符串的使用方式。
然而
根据 these MS docs,仅当包含在双引号 (") 字符串中时才解释转义序列。
这似乎暗示我不能在单引号字符串中放入换行符?
的确,PowerShell 的 verbatim strings('...'
,即 单-引号)仅支持 one 转义序列:''
,它允许您逐字嵌入 '
因此,您的选择是:
或者:在你的'...'
字符串.[=中嵌入一个逐字(实际)换行符22=]
或者 - 这适用于您想要以编程方式而不是逐字生成的任何字符 - 使用 字符串连接 (+
) 或通过 -f
、format 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)决定了格式字符串中使用的换行符。
在 powershell 中,双引号 "
表示“可扩展”字符串,类似于其他上下文中的“字符串插值”。单引号 '
是不进行插值的字符串。
我很喜欢这种区别,因为它可以帮助我预测特定字符串的使用方式。
然而
根据 these MS docs,仅当包含在双引号 (") 字符串中时才解释转义序列。
这似乎暗示我不能在单引号字符串中放入换行符?
的确,PowerShell 的 verbatim strings('...'
,即 单-引号)仅支持 one 转义序列:''
,它允许您逐字嵌入 '
因此,您的选择是:
或者:在你的
'...'
字符串.[=中嵌入一个逐字(实际)换行符22=]或者 - 这适用于您想要以编程方式而不是逐字生成的任何字符 - 使用 字符串连接 (
的 模板方法+
) 或通过-f
、format 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)决定了格式字符串中使用的换行符。