在Win命令行中,您可以执行cmd1 && cmd2
,并且只有在cmd2
成功的情况下才会执行cmd1
。我认为,根据此处的其他答案,powershell等效项将为(cmd1) -and (cmd2)
。但是,在测试它时,我会看到奇怪的行为-特别是,当我应该正确时,我会失败。这是一个最小的复制示例。
PS>(Start-Sleep 1)
PS>$?
True
PS>(Start-Sleep 1) -and (Start-Sleep 1)
False
PS>$?
True
PS>$z = (Start-Sleep 1) -and (Start-Sleep 1)
False
PS>$z
False
PS>$?
True
为什么睡眠无法连锁,为什么$z
与$?
不匹配?
答案 0 :(得分:4)
这些命令没有执行您认为正在执行的操作。您不是在执行两个命令,而是让解释器根据括号中命令的输出来评估两个语句。
在Powershell中,括号用于表示首先执行的语句。 sqlalchemy.exc.DataError: (psycopg2.errors.InvalidTextRepresentation) invalid input syntax for type uuid: "<sqlalchemy.engine.result.ResultProxy object at 0x03D165B0>"
LINE 2: ...xtra) values ('af80a4fa939511e9b11ec0389662fd98', '<sqlalche...
^
[SQL:
insert into events (event_id,user_id,host_id,type,name,location,event_start,event_end,member_count,event_status,description,faq,extra) values ('af80a4fa939511e9b11ec0389662fd98', '<sqlalchemy.engine.result.ResultProxy object at 0x03D165B0>', '<sqlalchemy.engine.result.ResultProxy object at 0x03D16590>', 'hackathon', 'make-a-thon', '{}', '<sqlalchemy.engine.result.ResultProxy object at 0x03D16770>', '<sqlalchemy.engine.result.ResultProxy object at 0x03D16B30>', '300', 'offline', 'growth product is main focus', '{}', '{}');
]
(Background on this error at: http://sqlalche.me/e/9h9h)
将在返回时返回$ NULL,因为在执行过程中或返回时未将任何内容写入缓冲区。 Powershell将$ NULL评估为false,因此在进行Start-Sleep
检查时,-and
作弊并发现输入为$ false,这可能是为了节省时间。
-and
所以您实际上是在说:
(Start-Sleep -S 1) == $false
当然是$null -and $null
。因为当$false
与$false
一起使用时AND
是$false
。
答案 1 :(得分:1)
开始睡眠为$ null。但是$ null-和$ null是$ false。
PS C:\users\js> $a = Start-Sleep 1
PS C:\users\js> $a
PS C:\users\js> $a -eq $null
True
PS C:\users\js> $a -and $a
False
PS C:\users\js> [bool]$a
False
PS C:\users\js> $false -and $false
False
短路。
PS C:\users\js> $true -and (write-host hi)
hi
False
PS C:\users\js> $false -and (write-host hi)
False
PS C:\users\js> $true -or (write-host hi)
True
PS C:\users\js> $false -or (write-host hi)
hi
False
请注意,在PS中,-and和-or具有相同的优先级!