在bash中,我可以这样做:
if cd $some_directory; then
rm *
else
echo "Could not change directory! Aborting." 1>&2
exit 1
fi
如果退出状态为0,则将执行if语句,因为if会评估退出状态。
为什么Powershell if声明没有做同样的事情?如果我想检查退出状态,我必须检查$?之后评估为真或假。
答案 0 :(得分:0)
If语句正在评估输出流的结果,而不是错误流。如果要评估If中的错误流,请重定向错误流:
if (cd $some_directory 2>&1)
{echo "Could not change directory! Aborting." }
默认情况下,Powershell cmdlet不会将结果状态输出到输出流,因为通常您将沿着管道将结果发送到期望特定对象类型的cmdlet和函数,并且您不需要&# 39;那些状态代码污染该流的是什么。
答案 1 :(得分:-1)
在PowerShell中,您使用Test-Path $some_directory
检查文件夹是否存在。它返回一个布尔值。
这样看起来像这样,同时避免在失败的cd语句上抛出任何错误。 在失败的声明中捕获退出代码比IMO更清晰。
if (test-path $some_directory) {
cd $some_directory
del *
} else {
echo "Could not change..."
}