代码之家  ›  专栏  ›  技术社区  ›  rmeador

如何在powershell中将表达式用作函数参数

  •  5
  • rmeador  · 技术社区  · 14 年前

    abs(x + y)
    

    表达式 x + y 并将结果传递给 abs 作为参数。。。在PowerShell里我该怎么做?到目前为止,我找到的唯一方法是创建一个临时变量来存储表达式的结果,并传递它。

    PowerShell似乎有非常奇怪的语法和解析规则,它们总是让我大吃一惊,就像这种情况一样。有人知道解释语言基本理论的文档或教程吗?我不敢相信这些都是特殊情况,一定有一些押韵或原因,我还没有阅读教程解释。是的,我读过 this question ,所有这些教程都很糟糕。我几乎被降级为从现有代码中学习。

    2 回复  |  直到 7 年前
        1
  •  7
  •   Corey Ross    14 年前


    表达式模式类似于大多数其他语言的解析方式—数字是数字,字符串被引用。

    命令模式将所有内容都视为字符串,变量和括号除外。这里的字符串不需要被引用。

    1+2          Expression mode - starts with number
    "string"     Expression mode - starts with quote
    string       Command mode - starts with letter
    & "string"   Command mode - starts with &
    . "string"   Command mode - starts with . and a space
    .123         Expression mode - starts with . and number (without space)
    .string      Command mode - starts with a . that is part of a command name
    

    通过用括号括住命令,可以在单行中混合模式。

    function Abs($value)
    {
        Write-Host $args
        if($value -lt 0) { -$value } else { $value }
    }
    
    Abs 1 + 2
    #Prints:  + 2
    #Returns: 1
    
    Abs 1+2
    #Prints:  
    #Returns: 1+2
    
    Abs (1 + 2)
    #Prints:  
    #Returns: 3
    
    Abs (1+2)
    #Prints:  
    #Returns: 3
    
        2
  •  3
  •   Keith Hill    14 年前

    PS> function abs($val) {Write-Host "`$val is $val"; if ($val -ge 0) {$val} `
                                                        else {-$val}}
    PS> abs (3+4)
    $val is 7
    7
    

    Windows PowerShell in Action 作者:布鲁斯·帕耶特(他是语法的幕后黑手)。如果您可以再等几个月(或者可以使用电子版本),那么今年夏天将推出第二版,它已经为PowerShell 2.0进行了更新。

    Effective PowerShell 系列很有用。结账项目#10开 PowerShell Parsing Modes .