请考虑以下 PowerShell 赋值语句:
$rc = (gci -r -fi *.rar)
如果目录结构中存在 rar 文件,则echo $?
显示以下内容:
Directory: C:\file tests
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 7/22/2012 7:09 PM 3699776 somefile.rar
美好的。现在考虑这个 PowerShell if 语句:
if (gci -r -fi *.rar)
{
echo "Rar files found"
}
else
{
echo "No rar files"
}
在 if 语句中,来自 gci cmdlet 的返回被视为布尔值。但是在前面的赋值语句的情况下,相同 cmdlet 的返回会产生一个字符串输出。
我知道 PS 是一个对象外壳。我了解 cmdlet 的行为因上下文而异。但我不明白的是这是如何完成的,以及使用了什么机制。
具体来说:if语句使用的魔法是什么,它允许将 gci 的返回值视为布尔值?如果我想在其他地方(在 if 语句之外)使用该机制,我需要做什么?是否有某种“转换为布尔”运算符?例如
$rc = (Cast following to boolean)(gci -r -fi *.rar)