powershell - 如何在powershell中使用表达式作为函数参数

标签 powershell parameters function

在我使用过的每种语言中,这都是一项非常简单的任务,但我似乎无法在 PowerShell 中弄清楚。我在 C 中谈论的一个例子:

abs(x + y)

表达式 x + y被评估,并将结果传递给 abs作为参数......我如何在PowerShell中做到这一点?到目前为止我想出的唯一方法是创建一个临时变量来存储表达式的结果,然后传递它。

PowerShell似乎有很奇怪的语法和解析规则,不断让我措手不及,就像这种情况。有谁知道解释该语言基本理论的文档或教程?我不敢相信这些都是特殊情况,一定有一些我尚未阅读的教程解释的押韵或原因。是的,我读过 this question ,所有这些教程都很糟糕。我几乎被降级为从现有代码中学习。

最佳答案

在您的情况下,只需将表达式用括号括起来即可将其传递给您的函数。

您需要这样做,因为 PowerShell 具有多种解析模式,具体取决于命令的开头。

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

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

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

您可以通过用括号将命令括起来在一行中混合模式。

如果您按以下方式定义函数 abs ,您可以看到这种效果:
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

关于powershell - 如何在powershell中使用表达式作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2885528/

相关文章:

c# - 需要递归函数来生成唯一的字符串组合

powershell - Azure 自动化上的 Get-AzureStorageKey 错误

如果没有字符串数组的输入,C# 会崩溃

javascript - string.length + 计数器变量的使用

c++ - 在启动时为程序添加参数

delphi - 在 Delphi 中使用单个函数释放内存和 nil

javascript - 为什么 javascript 会跳过我的一些函数?

powershell - 通过 powershell 或 vbscript 以编程方式将现有的 ssl 证书分配给 iis6 中的网站

powershell - 新 PSDrive --Persist 不起作用

java - 我想以管理员身份运行 PowerShell 并通过 Java 在管理员电源 shell 中执行命令