gpt4 book ai didi

长字符串的 Powershell 脚本缩进

转载 作者:行者123 更新时间:2023-12-04 01:55:06 26 4
gpt4 key购买 nike

这个问题不必这样解决,但如果可以的话,会为我节省很多宝贵的时间:

我一直在将“一次一行”记录到日志文件中。像这样:

$mylogentry = "A string of text containing information"
$mylogentry | out-file -append $log_file_path
$array_of_log_entries += $mylogentry

数组的原因是我将它们加入到发送消息正文中。

但是,当我有长引号时,我喜欢将它们分开。我可以使用反引号 '`' 字符来做到这一点。
如果报价行嵌套在其他内容下,我从未解决过如何转义制表符。在每个缩进之前使用反引号不会删除标签。

如果您查看这样的网站: http://technet.microsoft.com/en-us/magazine/hh475841.aspx您会看到,即使他鼓励缩进,他的代码也没有为参数缩进。 (您实际上可以在其中添加标签,因为引号之外的空格被忽略。也许他只是在说明问题)

这是我的意思的一个尝试的例子。 (注意我无法在 SE 上复制格式。4 空格缩进似乎不再创建代码块)
if($somecondition){
$mylogentry = "A string of really long text for non-technical people `
` ` continue to write text here. Additional info (technical): $techvar"

由于我的缩进,该字符串在“人”和“继续”之间会有很大的差距。我当然可以从第 0 列开始“继续”,但我的代码看起来更加愚蠢。

最佳答案

除了其他答案之外,我还想分享一些选项。

连接子字符串数组(显式)

一元 -join运算符(operator)

$singleLineText = -join @(
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim "
"veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea "
"commodo consequat."
)

二进制 -join运算符(operator)

$singleLineText = @(
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod"
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
"veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
"commodo consequat."
) -join ' '

优点:
  • 不需要加号 (+) 或逗号 (,)。
  • 轻松切换到二进制 -join "`r`n"多行字符串的运算符。
  • 免费使用所需的缩进。

  • 缺点:
  • 文本操作可能很烦人。

  • 连接子字符串数组(隐式) |避免

    附加到一个空字符串。

    $singleLineText = '' + @(
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod"
    "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,"
    "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
    "consequat."
    )

    管道到脚本 block 并使用 $input - 一个自动变量。

    $singleLineText = @(
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod"
    "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,"
    "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo"
    "consequat."
    ) | & { "$input" }

    每当一个数组被强制转换成一个字符串时, [System.String]::Join(separator, array)方法被隐式应用。其中分隔符默认为“”(空格),可以通过设置 $OFS覆盖- 输出字段Sperator 特殊变量。

    优点:
  • 适用于连接管道输出。

  • 缺点:
  • 缺乏清晰性(出于多种原因),因此应尽可能避免。

  • 这里字符串

    $singleLineText = @"
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
    incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
    nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
    "@ -replace "`r" -replace "`n", ' '

    优点:
  • 适合插入大张任意预格式化文本(如源代码)。
  • 保留源缩进。
  • 无需转义引号。

  • 缺点:
  • 对脚本格式不友好。
  • 可能很难跟踪尾随空格。

  • 加法赋值运算符 ( +=)

    $s =  "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ";
    $s += "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad ";
    $s += "minim veniam, quis nostrud exercitation ullamco laboris nisi ut ";
    $s += "aliquip ex ea commodo consequat.";

    优点:
  • 最明显、通用和众所周知的语法(在 PowerShell 之外)。
  • 主要是与编程语言无关的 *.

  • * 在某些编程语言中可能会违反变量命名约定。

    缺点:
  • 文本操作可能很烦人。
  • 关于长字符串的 Powershell 脚本缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372360/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com