PowerShell三元比较赋值输出新值的原因与无Out-Null解决方案
现象产生原因
PowerShell 有一个核心特性:所有未被显式捕获、重定向的语句返回值,都会默认输出到控制台流。
你写的三元表达式中,两个分支的$openlog = "NO"/$openlog = "YES"都是赋值语句,PowerShell 中赋值语句本身的返回值就是你赋给变量的对应值,这部分返回值没有被接收,自然就直接打印到控制台了。
无需
Out-Null的解决方案 方案1(最简洁,推荐)
直接把三元运算符的判断结果赋值给变量本身,不要在三元分支内做赋值,所有返回值会被变量直接接收,不会有多余输出:
PS C:\Users\Scott> $openlog = "YES" PS C:\Users\Scott> $openlog = $openlog -eq "YES" ? "NO" : "YES" PS C:\Users\Scott> $openlog NO PS C:\Users\Scott> $openlog = $openlog -eq "YES" ? "NO" : "YES" PS C:\Users\Scott> $openlog YES
方案2(用[void]丢弃返回值)
如果一定要在三元分支内做赋值,可以把赋值语句用[void]包裹,强制丢弃返回值:
($openlog -eq "YES") ? ([void]($openlog = "NO")) : ([void]($openlog = "YES"))
方案3(赋值给$null丢弃返回值)
也可以将分支内赋值语句的返回值赋给自动变量$null,同样可以避免输出:
($openlog -eq "YES") ? ($null = $openlog = "NO") : ($null = $openlog = "YES")
内容的提问来源于stack exchange,提问作者user736893
相关产品推荐
相关产品推荐

