如何将 2D 字符串数组传递给电源外壳脚本?



让我们让 PSscript接受String[][]的单参数p。有没有办法,在调用 powershell 时如何在命令行 (cmd( 上本地传递相当于@(@(1,2), @(a,b))的等效物?

像这样:

powershell.exe -Command .script -p "(1,2),(a,b)"

我唯一设法做的就是通过"1,2,a,b"传递String[]

如果在参数值两边加上双引号,即使它包含逗号,该值也会被解释为字符串。如果你想要一个字符串数组,你可以引用每个数组的各个元素,使它们成为字符串。允许 PowerShell 将逗号解释为运算符,您将获得成功。您还应该用双引号将PowerShell.exe-Command值括起来,无论是在CMD shell还是PowerShell中调用。

对于您的示例,请使用:

Powershell.exe -Command ".script.ps1 -p (1,2),(a,b)"

对于单个带引号的元素,您可以轻松使用单引号,这不需要转义:

Powershell.exe -Command ".script.ps1 -p ('first','second','third'),('fourth','fifth','sixth')"

顺便说一句,您也可以在技术上使用数组子表达式运算符@()

Powershell.exe -Command ".script.ps1 -p @(@(1,2),@(a,b))"

内部双引号方案:

  • 内部双引号将需要转义。转义方法因调用外壳而异。
  • 对外部程序的 CMD shell 调用需要反斜杠转义内引号。
  • PowerShell 对外部程序的调用首先需要反引号转义,然后是反斜杠转义。

  • 使用 CMD 的示例:

    Powershell.exe -Command ".script.ps1 -p ("one","two"),("a","b")"
    
  • 使用 PowerShell 的示例:

    Powershell.exe -Command ".script.ps1 -p (`"one`",`"two`"),(`"a`",`"b`")"
    

About_Operators描述了逗号运算符。作为二进制或一元运算符,它创建一个数组。如果包含逗号的值(对象(被引号括起来,它将是[string]而不是[object[]],因为逗号被视为值的一部分,而不是分隔符或运算符。