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”
这是最有趣的测试用例,可能也是最违反直觉的,因为它产生的结果可能看起来不一致。下面是如何评估它的:
(“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需要雇用您记录所有内容。