Arrays 如何将2D字符串数组传递给powershell脚本?

Arrays 如何将2D字符串数组传递给powershell脚本?,arrays,powershell,command-line,Arrays,Powershell,Command Line,让PSscript接受String[][]的单个参数p。调用powershell时,有没有方法,如何在命令行(cmd)上本地传递等价的@(@(1,2),@(a,b)) 比如: powershell.exe -Command .\script -p "(1,2),(a,b)" 我唯一能做的就是通过“1,2,a,b”传递String[]如果在参数值周围加双引号,即使它包含逗号,该值也将被解释为字符串。如果需要一个字符串数组,可以引用每个数组的各个元素使其成为字符串。允许PowerShell将逗号解

让PS
script
接受
String[][]
的单个参数
p
。调用powershell时,有没有方法,如何在命令行(
cmd
)上本地传递等价的
@(@(1,2),@(a,b))

比如:

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

我唯一能做的就是通过
“1,2,a,b”
传递
String[]

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

例如,请使用:

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))"

内部双引号场景:

  • 内部双引号将需要转义。转义方法因调用shell而异
  • 对外部程序的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\`")"
    


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

不要在整个参数
-p
值周围使用引号,因为它将被解释为字符串。使用
-p(1,2)、(a,b)
。如有必要,您可以引用其中的各个元素。但是,您应该引用
-Command
值-->
powershell.exe-Command“\script-p(1,2)、(a,b)”
。您是从cmd shell还是PowerShell运行此操作?很酷,谢谢,因此关键是正确引用并理解作为操作员的