【问题标题】:Why are "Here Strings" called "Here Strings"?为什么“这里的字符串”被称为“这里的字符串”?
【发布时间】:2017-01-04 00:39:41
【问题描述】:

这个名字背后的原因是什么?

SS64 在这里解释 PowerShell 中的字符串如下:

此处的字符串是可以跨多行的单引号或双引号字符串。 不计算单引号字符串中的表达式。

here-string 中的所有行都被解释为字符串,即使它们没有用引号括起来。

$myHereString = @'
some text with "quotes" and variable names $printthis 
some more text 
'@ 

【问题讨论】:

    标签: string powershell naming-conventions naming


    【解决方案1】:

    它们在 PowerShell 中有这个名称,因为它是从 Unix 样式的 shell 中借用的,就像 PowerShell 中的许多其他元素和概念一样:

    From Wikipedia:

    这里的文档起源于 Unix shell,并且可以在 sh、csh、ksh、bash 和 zsh 等中找到。

    至于为什么最初使用这个名字,文章并没有严格涵盖词源,而是基于这样的描述:

    在计算中,here 文档(here-document、here-text、heredoc、hereis、here-string 或 here-script) 是文件文字或输入流文字:它是被处理的源代码文件的一部分好像它是一个单独的文件。该术语还用于一种形式的多行字符串文字,这些文字使用类似的语法,在文本中保留换行符和其他空格(包括缩进)。

    名称的“here”部分指的是包含在“here”中的文件,这似乎是合乎逻辑的(就像在这一点上一样)。


    为了完整起见,值得注意的是 PowerShell 还支持在单引号和双引号 [string]s 中直接使用换行符,如下所示:

    $myString = 'some text with "quotes" and variable names $printthis 
    some more text'
    

    here-string 有用的一个更好的例子是当你需要两种类型的引号时:

    $myHereString = @'
    some text with "quotes" and variable names $printthis 
    some more text 
    and my grandma's soup
    '@ 
    

    如果这只是一个单引号字符串,则需要对 grandma's 中的 ' 进行转义。

    如果它是双引号字符串,您需要转义 " 的实例并且如果您没有您需要转义 $ /em> 想要变量扩展。


    有趣的是:here-strings 的解释方式之间的差异构成了this demonstration of writing a bash/powershell/win batch polyglot(一个其内容可以在任何这些环境中执行的脚本)的基础。

    【讨论】:

    • 另外,在此处的字符串中,不包括初始换行符,这与使用常规字符串的方式不同。
    • marsze 确实如此,并且在此处的字符串实现中也有所不同!我添加了一个指向一个有趣的 github 存储库的链接,通过创建一个多语言脚本来展示它的实际效果。
    • 有没有办法使用像EOF这样的关键字代替引号,所以你避免转义引号?
    猜你喜欢
    • 2013-11-03
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2015-04-08
    • 2022-11-13
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多