(Powershell)Powershell是否有一些奇怪的括号/括号平衡规则



当我试图创建一个函数时,我的powershell的行为非常奇怪。为了证明,这里有一个基本函数,我不知道,它计算二次公式:

1 function Get-Quadratic {
2
3 [CmdletBinding()]
4
5 param (
6         [Parameter(Position = 0, Mandatory = $true)]
7         [int32]$a
8         [Parameter(Position = 1, Mandatory = $true)]
9         [int32]$b
10         [Parameter(Position = 2, Mandatory = $true)]
11         [int32]$c
12 )
13
14 Write-Output $a + " " + $b + " " + $c
15 }

如果你尝试用. .quadratic.ps1加载它,你会得到:

At C:Users(me)DesktopCurplaygroundquadratic.ps1:7 char:11
+     [int32]$a
+              ~
Missing ')' in function parameter list.
At C:Users(me)DesktopCurplaygroundquadratic.ps1:1 char:24
+ function Get-Quadratic {
+                        ~
Missing closing '}' in statement block or type definition.
At C:Users(me)DesktopCurplaygroundquadratic.ps1:12 char:1
+ )
+ ~
Unexpected token ')' in expression or statement.
At C:Users(me)DesktopCurplaygroundquadratic.ps1:15 char:1
+ }
+ ~
Unexpected token '}' in expression or statement.
+ CategoryInfo          : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisInFunctionParameterList

在尝试制作函数时,我一直在学习教程,但我的powershell似乎甚至不喜欢最基本的命令。如果有帮助的话,我的版本是

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1320

Abraham Zinala提供了关于代码的主要问题的关键指针

  • param(...)块内的各个参数声明必须以,分隔。

  • 虽然概念上的about_Functions确实说明了这一要求,但考虑到在其他上下文(@(...)$(...)@{ ... }(中,仅用换行符分隔元素就足够了,这可能不是显而易见的。事实上,有一个现有的功能请求,要求使用,可选-请参阅GitHub问题#8957。

次要问题Write-Output $a + " " + $b + " " + $c无法按预期工作:

  • 表达式(例如在您的情况下与+运算符串联的字符串(需要(...)中的外壳,以便将其结果作为单个命令参数传递-请参阅此答案

最新更新