【发布时间】:2013-06-02 22:40:40
【问题描述】:
请考虑以下 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)
【问题讨论】:
-
它没有返回布尔值,而是返回它是 $null 或不是 $null
-
即。
$(gci -r -fi *.rar) -eq $null -
@jbockle:升级你的 cmets,谢谢。包围
gci -r -fi *.rar的$(...)有什么作用?我试过没有美元符号,它仍然有效。 IE。(gci -r -fi *.rar) -eq $null -
这只是变量扩展,但我只是出于习惯添加了 $
标签: powershell