powershell - PowerShell 中 If 语句的多变量条件

标签 powershell if-statement logic

感谢您在这方面的帮助,我想我已经把下面的内容复杂化了,但逻辑并没有回应我的想法。

问题逻辑:

$a = "One"
$b = "Two"
$c = "Three"
$d = "Four"

If( {$a -and $b} -ne {$c and $d} ) {
   Write-Host "Values are Different"
} Else {
   Write-Host "values are the same"
}

我希望 If 语句在 $a 和 $b 与 $c 和 $d 不同时运行,如果它们相同,请参见下文,我希望它输出值相同

$a = "One"
$b = "One"
$c = "One"
$d = "One"

提前致谢!

最佳答案

您可以使用Compare-Object将值对作为数组进行比较:

if (Compare-Object $a, $b   $c, $d  -SyncWindow 0) {
  'different'
} else {
  'same'
}

请注意,这很方便,但相对较慢,这在具有多次迭代的循环中可能很重要。

  • Compare-Object cmdlet比较两个数组并默认返回有关它们差异的信息。

  • -SyncWindow 0 只比较直接对应的数组元素;换句话说:$a 必须等于 $c,而 $b 必须等于 $d;如果没有 -SyncWindow,数组元素将以任意顺序进行比较,例如 1, 2 将被视为等于 2, 1

  • 使用 Compare-Object 调用的结果作为条件隐式地将结果强制转换为 bool 值,以及任何 非空 结果 - 表明至少存在 1差异 - 将评估为 $True


至于你尝试了什么:

在您的条件中使用 { ... } 是不合适的。
{ ... } 中包含的表达式是脚本 block - 您可以稍后执行的代码片段,例如 &

即使您使用 (...) 来阐明运算符优先级(-ne 的优先级高于
-and),但是您的条件不会按预期工作:

  • ($a -and $b) -ne ($c -and $d) 将所有变量视为 bool 值;实际上,鉴于 PowerShell 的隐式 bool 转换,您正在比较一个值对是否至少有一个空字符串与另一个值对是否没有。

关于powershell - PowerShell 中 If 语句的多变量条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49726958/

相关文章:

.net - 在PowerShell中仅使用WinSCP下载新文件

用于打印每个 if 语句的最后一个值的 Python

if-statement - 数字上的 zsh 条件导致错误模式

java - 如何打印给定数字 n 的魔术矩阵最多 n 方

C# 在 Unity 中使用 IEnumerator Coroutines 是否适合应用程序的逻辑流程?

powershell - 问题使脚本在Powershell中接受带空格和破折号的组名

powershell - 通过身份验证获取内容

Powershell 命令在每个文件之前添加文本

java - If 语句在字符串搜索中不起作用

java - 涉及 2d 数组的逻辑错误/输出问题