【发布时间】:2021-12-15 20:25:15
【问题描述】:
我试图弄清楚是什么决定了值是否从 PowerShell 函数返回,但我遇到了一些奇怪的问题。 about_return docs 说:
在 PowerShell 中,每个语句的结果都会作为输出返回,即使没有包含 Return 关键字的语句。
但这似乎掩盖了细节。如果我运行这个:
function My-Function {
1
[System.Console]::WriteLine("Hello")
$null
$true
$false
0
2
}
运行它会返回一个数组(连同打印“Hello”):
1
True
False
0
2
这意味着$null 不会自动返回。然后我尝试递增,因为我在函数中使用它:
function My-Function {
$n = 1
$n
$n++
($n++)
-join @(1, 2, 3)
(-join @(1, 2, 3))
}
返回:
1
2
123
123
所以,$n 和 $n++ 已返回,但 ($n++) 没有返回?但是当与另一个运营商 (-join) 相比时,在每种情况下都是相同的。为什么$n++ 周围的括号会阻止它被返回,为什么其他运算符的行为不一样?这更加令人困惑,因为 = 运算符似乎以相反的方式工作:
function My-Function {
($n = 1)
$n
$n++
($n++)
}
返回:
1
1
2
现在包装赋值会导致它被返回,而包装 $n++ 会导致它不被返回。
总之,我只想知道一种直接的方法,可以查看函数中的一行代码,并确定它是否会导致返回值。
【问题讨论】:
-
其实
$n++没有返回,($n++)被返回了。 -
@SantiagoSquarzon 哇,不知何故,我设法混淆了前后递增。太尴尬了。
-
PS 的好处是我们可以在控制台上测试所有内容,我现在无法解释为什么但是用
( )包装递增变量将强制它返回到控制台。当您执行$n = 0时,($n++)、0将返回到标准输出,但$n将等于1(不是您的代码的一部分,但将其作为示例) -
这叫做变量挤压。通常静默变量赋值也会发生同样的事情,它也会输出
-
@SantiagoSquarzon 我现在意识到
$null在打印时似乎没有出现在数组中,这让我感到困惑。如果我使用-join打印出返回的数组以插入分隔符,是的,我可以看到它确实返回了,只是没有显示。感谢您的指导。
标签: function powershell powershell-7.0