【问题标题】:Capturing command output in Powershell as string instead of array of strings将Powershell中的命令输出捕获为字符串而不是字符串数组
【发布时间】:2019-02-21 19:21:50
【问题描述】:

我试图将运行外部命令的输出捕获为字符串,但 Powershell 返回的结果始终是字符串数组。据我了解,Powershell 在换行符(Windows 或 Unix 行结尾)上拆分输出并将结果存储在数组中,但我希望保留这些换行符,因为这是用于 svn 预提交钩子脚本来检测是否提交的文件有混合行结尾。

$output = svnlook cat -t $transId -r $repos $filename

此时行尾已被剥离,$output 是一个字符串数组,每行输出一个。

重定向到文件似乎不起作用,因为这会使行尾正常化。如何告诉 Powershell 不要拆分命令的输出?

谢谢!

【问题讨论】:

    标签: powershell


    【解决方案1】:

    将命令输出通过管道传递到Out-String cmdlet:

    $output = svnlook cat -t $transId -r $repos $filename | Out-String
    

    【讨论】:

      【解决方案2】:

      只需将“inner”命令括在括号中,并使用-join 运算符和右侧的"`n"

      # Preserve line breaks
      $result = (ipconfig) -join "`n";
      
      # Remove line breaks
      $result = (ipconfig) -join '';
      

      【讨论】:

        【解决方案3】:

        如果您需要它作为单个字符串,您可以将结果转换为 [string]

        [string]$output = svnlook cat -t $transId -r $repos $filename
        

        【讨论】:

        • 请注意,与 out-string 解决方案相反,tis 连接行而不放入换行符。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 2017-05-25
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        相关资源
        最近更新 更多