请考虑以下PowerShell赋值语句:
$rc = (gci -r -fi *.rar)
Run Code Online (Sandbox Code Playgroud)
如果目录结构中存在rar文件,则echo $?显示以下内容:
Directory: C:\file tests
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 7/22/2012 7:09 PM 3699776 somefile.rar
Run Code Online (Sandbox Code Playgroud)
精细.现在考虑这个PowerShell if语句:
if (gci -r -fi *.rar)
{
echo "Rar files found"
}
else
{
echo "No rar files"
}
Run Code Online (Sandbox Code Playgroud)
在if语句中,gci cmdlet的返回被视为布尔值.但是,在早期赋值语句的情况下,来自相同cmdlet的返回生成了字符串输出.
我知道PS是一个对象shell.我理解cmdlet根据上下文采取不同的行为.但我不明白这是如何实现的,以及使用了什么机制.
具体来说:if语句允许从gci返回被视为布尔值的魔力是什么?如果我想在其他地方使用该机制(在if语句之外),我该怎么办?是否有某种"强制转换为布尔"运算符?例如
$rc = (Cast following to boolean)(gci -r -fi *.rar)
Run Code Online (Sandbox Code Playgroud)
这张表给出了答案.
True False
~~~~ ~~~~~
$TRUE $FALSE
Any string of length > 0 Empty string
Any number ? 0 Any number = 0
Array of length > 1 Array of length 0
Array of length 1 whose element is true Array of length 1 whose element is false
A reference to any object <<<<< $NULL
Run Code Online (Sandbox Code Playgroud)
这背后的想法是使用类似的检查来验证对象是否正确初始化.
| 归档时间: |
|
| 查看次数: |
4304 次 |
| 最近记录: |