Powershell数组和括号

Powershell数组和括号,powershell,syntax,Powershell,Syntax,来自其他编程语言,我希望下面的语句都能产生相同的结果。有人能解释一下为什么括号在这里起作用吗 PS D:\> "ab", "cd" ab cd PS D:\> "a"+"b" , "c"+"d" ab cd PS D:\> "a"+"b" , ("c"+"d") ab cd PS D:\> ("a"+"b"), "c"+"d" ab c d PS D:\> ("a"+"b"), ("c"+"d") ab cd PS D:\> 适用规则如

来自其他编程语言,我希望下面的语句都能产生相同的结果。有人能解释一下为什么括号在这里起作用吗

PS D:\>   "ab",      "cd"
ab
cd
PS D:\>  "a"+"b" ,  "c"+"d"
ab cd
PS D:\>  "a"+"b" , ("c"+"d")
ab cd
PS D:\> ("a"+"b"),  "c"+"d"
ab
c
d
PS D:\> ("a"+"b"), ("c"+"d")
ab
cd
PS D:\>

适用规则如下:

  • 是创建操作数数组的一元或二元运算符,其优先级高于
    +
    运算符
  • +
    运算符可用于数字相加、字符串连接和数组连接。左操作数的数据类型决定执行哪种类型的操作。如果可能,将右操作数转换为左操作数的数据类型;如果不可能,则抛出一个错误*
  • 当优先级相等时,计算从左到右进行
  • 通过列出以空格分隔的元素,数组被转换为字符串
  • 正如您所期望的那样,括号的优先级高于任何运算符,并导致在括号之外的任何内容之前对封闭表达式求值
  • 数组对象的默认输出是元素列表,每行一个
*这解释了看似不一致的结果,例如
“foo”+1
的计算结果为
foo1
,但
1+“foo”
给出了一个错误

>让我们看看你的测试用例,并分析上面解释的逻辑发生了什么。


案例一:

“ab”、“cd”
这一个非常简单:
操作符创建一个由两个字符串组成的数组,
ab
bc


案例二:

“a”+“b”、“c”+“d”
乍一看,这似乎是违反直觉的;关键是要认识到
是在
+
之前进行评估的。以下是如何逐步获得结果:

  • 首先计算
    “b”,“c”
    (由于
    优先于
    +
    ),创建元素
    b
    c
    的数组
  • 接下来,将
    +
    运算符应用于
    “a”
    和步骤1中创建的数组。由于左操作数
    “a”
    是字符串,因此会执行字符串串联
  • 要将字符串与数组连接,数组将强制转换为字符串。
    b
    c
    的数组成为字符串
    bc
  • a
    bc
    串联,产生
    abc
  • 最后,
    ab c
    d
    连接以生成最终结果,
    ab cd

  • 案例三:

    “a”+“b”(“c”+“d”)
    
    这产生了相同的巧合结果;评估的方式不同:

  • (“c”+“d”)
    首先计算,因为有括号。这是一个普通的字符串连接,结果是字符串
    cd
  • 接下来,将
    运算符应用于
    “b”
    和步骤1中的字符串,创建元素
    b
    cd
    的数组。(这在
    “a”+“b”
    之前进行计算,因为
    的优先级高于
    +
  • 然后,将
    +
    运算符应用于
    “a”
    和步骤2中创建的数组。由于左操作数是字符串,因此将执行字符串串联
  • b
    cd
    的数组被转换为字符串
    b cd
  • 字符串
    a
    bcd
    串联在一起,最终输出
    ab cd

  • 案例四:

    (“a”+“b”),“c”+“d”
    
    这是最有趣的测试用例,可能也是最违反直觉的,因为它产生的结果可能看起来不一致。下面是如何评估它的:

  • 与案例III步骤1类似,首先计算
    (“a”+“b”)
    ,生成字符串
    ab
  • 应用于步骤1和
    “c”
    中的字符串,创建元素
    ab
    c
    的数组
  • +
    运算符应用于步骤2中的数组和下一个标记
    “d”
    。这一次,左操作数是一个数组,因此执行数组串联
  • 字符串操作数
    “d”
    被强制转换为一个元素的数组
  • 这两个数组连接成一个元素数组
    ab
    c
    、和
    d

  • 案例五:

    (“a”+“b”),(“c”+“d”)
    
    现在,应该很容易看到这里发生了什么:

  • (“a”+“b”)
    作为字符串
    ab
    计算
  • (“c”+“d”)
    作为字符串
    cd
    计算
  • 应用于步骤1和2中的字符串,创建
    ab
    cd
    的数组

  • 您可以通过该命令看到

    获取有关\u运算符\u优先级的帮助
    

    (帮助文档名称可以通过制表符完成,因此要保存键入,这就是
    关于\u op的帮助
    TABTAB)

    查看关于\u运算符的帮助\u优先级以获得表达式中所有运算符及其各自优先级的列表。感谢您的精彩解释。这对我来说完全是清白的。本质上,它是这样计算表达式的:
    “a+(“b”,“c”)+“d”
    (“a+“b”),“c”)+“d”
    很酷。无论如何,我将添加对示例的分析,因为问题和答案是为了作为未来搜索者的参考资料。Microsoft需要雇用您记录所有内容。