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

4
在powershell中,双引号"表示“可展开”字符串,类似于其他情况下的“字符串内插”。单引号'是不进行内插的字符串。我很喜欢这种区分,因为它帮助我预测一个特定的字符串如何使用。然而,根据这些微软文档,只有包含在双引号(")字符串中的转义序列才会被解释。这似乎意味着我不能在单引号字符串中放置换行符?

2
你可以在你的问题中添加一些代码吗?你尝试过什么? - dcaz
好的观点!但是糟糕的是,我现在才看到了这个评论,并且日常中已经没有 PowerShell 了。如果有 PowerShell 实例出现,我会尝试修改问题。 - orion elenzil
1个回答

5

实际上,PowerShell的verbatim字符串(即'...',也就是单引号仅支持一个转义序列:'',这允许您嵌入一个真实的'

因此,您有以下选择:

  • '...'字符串中嵌入真实(实际的)换行符。

  • 或者 - 对于任何要以编程方式生成而不是真实的字符 - 使用字符串拼接+或通过-f进行模板化处理,即格式运算符

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

'--- 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"

如果可以嵌入原样的换行符,则还可以使用一个here-string来提高可读性,这样做有额外的好处,就是不必转义嵌入的'字符。
# Here-string
@'
line1
line2
No escaping of ' needed.
'@

与普通的原样字符串一样,决定字符串中换行符格式的是包含该字符串的脚本的换行符格式(Windows风格的CRLF与Unix风格的LF)。

1
感谢确认和未来的道路。在我的情况下,在字符串声明中使用实际换行符是有效的。如果您提供的字符串文档包括这种方法的示例,那就太好了。我已经扫了那个页面几次,但印象中多行字符串需要使用“here strings”。祝好! - orion elenzil
1
很高兴听到这个消息,@orionelenzil。我同意关于引用规则的概念帮助主题需要改进,我鼓励您在PowerShell文档GitHub存储库中打开一个问题,网址为https://github.com/MicrosoftDocs/PowerShell-Docs/issues/new/choose - mklement0
1
added。这么大的项目只有30个未解决的问题,真是太棒了! - orion elenzil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接