$($error[0])和$error[0]的区别


PowerShell交流中心分类: Powershell基础$($error[0])和$error[0]的区别
0
labixiaoniu asked 5年 ago

我在看别人写的脚本里面有使用$($error[0])来显示错误信息,我不明白$() 在这里起什么作用。 $($error[0]) 和 $error[0].exception的输出结果是一样的,可以解释下这两种方法的区别和$()的作用或用法吗?

×用微信扫描并分享
1 Answers
0
Best Answer
Mooser Lee 管理员 answered 5年 ago

$()这种写法的主要区别体现在字符串中,单独运行的确没有区别。
比如字符串 “$error[0]”,输出的并不是最后一个error,而是所有的error。因为语法解析器只会解析到$error,后面的【0】是不会解析的。$()的诞生主要是为了解决这个问题比如字符串“$($error[0])”是会把$()内部的语句当成一个完整的表达式,先运行,运行结束后再替换到字符串中。
 

PS> dir pstips.net
dir : Cannot find path 'D:\Users\bzli\pstips.net' because it does not exist.
At line:1 char:1
+ dir pstips.net
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\Users\bzli\pstips.net:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

PS> 1/0
Attempted to divide by zero.
At line:1 char:1
+ 1/0
+ ~~~
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

PS> "$error[0]"
Attempted to divide by zero. Cannot find path 'D:\Users\bzli\pstips.net' because it does not exist. The specified module
 'PSReadline' was not loaded because no valid module file was found in any module directory.[0]
PS> "$($error[0])"
Attempted to divide by zero.
labixiaoniu replied 5年 ago

现在明白了,非常感谢!