三元比较输出新值
Ternary comparison outputs new value
PS C:\Users\Scott> $openlog = "YES"
PS C:\Users\Scott> ($openlog -eq "YES") ? ($openlog = "NO") : ($openlog = "YES")
NO
PS C:\Users\Scott> ($openlog -eq "YES") ? ($openlog = "NO") : ($openlog = "YES")
YES
PS C:\Users\Scott> ($openlog -eq "YES") ? ($openlog = "NO") : ($openlog = "YES")
NO
PS C:\Users\Scott> ($openlog -eq "YES") ? ($openlog = "NO") : ($openlog = "YES")
YES
PS C:\Users\Scott>
这有效,即它切换值,但它也将它写入控制台。为什么?在不使用 | Out-Null
?
的情况下,如何正确执行此操作而不输出新值
您可以使用下面的设置变量而不输出到控制台。
$openlog = $openlog -eq "YES" ? "NO" : "YES"
我还不知道为什么你的例子输出到控制台。我检查了 implementation,这是一个从未处理过且在测试期间未处理的用例。
更新:如下 mklement0 所述
enclosing an assignment in (...)
passes the value being assigned through
为您的用例提供最佳解决方案,绕过 您的代码问题:
至于:
it also writes it to the console. Why?
PowerShell 允许您将 赋值 用作 表达式 ,方法是将它们包含在 (...)
, grouping operator:
也就是说,类似($var = 'foo')
的东西也输出被分配的值,除了分配给变量$var
:
PS> ($var = 'foo')
foo
也就是说,该值输出到 PowerShell 的 成功输出流 (请参阅概念性 about_Redirection 帮助主题),默认情况下输出到主机(控制台) .
PS C:\Users\Scott> $openlog = "YES"
PS C:\Users\Scott> ($openlog -eq "YES") ? ($openlog = "NO") : ($openlog = "YES")
NO
PS C:\Users\Scott> ($openlog -eq "YES") ? ($openlog = "NO") : ($openlog = "YES")
YES
PS C:\Users\Scott> ($openlog -eq "YES") ? ($openlog = "NO") : ($openlog = "YES")
NO
PS C:\Users\Scott> ($openlog -eq "YES") ? ($openlog = "NO") : ($openlog = "YES")
YES
PS C:\Users\Scott>
这有效,即它切换值,但它也将它写入控制台。为什么?在不使用 | Out-Null
?
您可以使用下面的设置变量而不输出到控制台。
$openlog = $openlog -eq "YES" ? "NO" : "YES"
我还不知道为什么你的例子输出到控制台。我检查了 implementation,这是一个从未处理过且在测试期间未处理的用例。
更新:如下 mklement0 所述
enclosing an assignment in
(...)
passes the value being assigned through
至于:
it also writes it to the console. Why?
PowerShell 允许您将 赋值 用作 表达式 ,方法是将它们包含在 (...)
, grouping operator:
也就是说,类似($var = 'foo')
的东西也输出被分配的值,除了分配给变量$var
:
PS> ($var = 'foo')
foo
也就是说,该值输出到 PowerShell 的 成功输出流 (请参阅概念性 about_Redirection 帮助主题),默认情况下输出到主机(控制台) .