为什么PowerShell会以不同的方式考虑@()语法

Sha*_*pta 3 powershell

数组初始化在工作方式不同

$scripts = @(
    ("01", "a" , "01_Cleanup")
    ,("02", "b" , "02_Cleanup")
);
Run Code Online (Sandbox Code Playgroud)

输出:

$scripts[0] - "01"
$scripts[1] - "a"
$scripts[2] - "01_Cleanup"
$scripts[3] - "02"
"b"
"02_Cleanup"
Run Code Online (Sandbox Code Playgroud)

请注意数组初始化中的",":

$scripts = @(
    ("01", "a" , "01_Cleanup"),
    ("02", "b" , "02_Cleanup")
);
Run Code Online (Sandbox Code Playgroud)

输出:

$scripts[0] - "01"
"a"
"01_Cleanup"
$scripts[1] - "02"
"b"
"02_Cleanup"
Run Code Online (Sandbox Code Playgroud)

为什么?

Mar*_*ndl 8

它是因为逗号运算符的不同用法(二元一元):

作为二元运算符,逗号创建一个数组.作为一元运算符,逗号创建一个包含一个成员的数组.将逗号放在成员之前.


二进制:

@(
    ("01", "a" , "01_Cleanup"),
    ("02", "b" , "02_Cleanup")
) | foreach { Write-Host $_};
Run Code Online (Sandbox Code Playgroud)

输出:

01 a 01_Cleanup
02 b 02_Cleanup
Run Code Online (Sandbox Code Playgroud)

一元:

 @(
    ("01", "a" , "01_Cleanup")
    ,("02", "b" , "02_Cleanup")
) | foreach { Write-Host $_};
Run Code Online (Sandbox Code Playgroud)

输出:

01
a
01_Cleanup
02 b 02_Cleanup
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我想我的问题更像是为什么这个$ a = @(('a','b'))被视为2个单独的元素.如果你愿意,我可以为此创建一个问题 (2认同)