【问题标题】:powershell: newline in a single-quoted string?powershell:单引号字符串中的换行符?
【发布时间】:2022-01-12 18:33:34
【问题描述】:

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

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

然而

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

这似乎意味着我不能在单引号字符串中添加换行符?

【问题讨论】:

  • 你能在你的问题中添加一些代码吗?你试过什么。

标签: powershell escaping newline quotes single-quotes


【解决方案1】:

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

因此,您的选择是:

  • 或者:'...' 字符串中嵌入逐字(实际)换行符

  • 或者 - 这适用于您想要以编程方式而不是逐字生成的任何字符 - 使用 字符串连接 (+)通过-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 的额外优势em> 必须转义嵌入的 ' 字符:

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

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

【讨论】:

  • 感谢您的确认和前进的道路。在我的情况下,在字符串声明中使用实际的换行符是可行的。如果您链接到的字符串文档包含该方法的示例,那就太好了。我扫描了该页面几次,得出的印象是多行字符串需要使用“这里的字符串”。干杯!
  • 很高兴听到这个消息,@orionelenzil。我同意概念性的about_Quoting_Rules 帮助主题可以使用改进,我鼓励您在github.com/MicrosoftDocs/PowerShell-Docs/issues/new/choose 的 PowerShell 文档 GitHub 存储库中打开一个问题
  • added。这么大的项目只有 30 个未解决的问题,真是太神奇了!
猜你喜欢
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多