为何PowerShell比较代码块放入函数后无法正常工作?
PowerShell函数参数传递错误导致比较结果不一致
问题出在PowerShell的函数调用语法上,和你写的比较逻辑本身无关:
直接变量比较的部分是正确的:
$item1 -eq $item2会正常判断两个字符串相等,输出"Values are the same"。函数调用时的错误:
你用了compare_items($item1, $item2)这种类似C#的参数传递写法,但在PowerShell中,这种写法会把($item1, $item2)当成一个数组对象,作为第一个参数$i1传入函数,而第二个参数$i2会被默认赋值为$null。
此时函数内的$i1 -eq $i2实际上是在比较一个数组和$null,结果自然是$false,所以输出"Values are NOT the same"。
修正方法
改用PowerShell标准的函数调用语法——用空格分隔参数,不要加括号和逗号:
compare_items $item1 $item2
验证错误原因
可以在函数里添加一行调试输出,就能看到参数实际接收的值:
function compare_items($i1, $i2) { Write-Host "`$i1的值: $i1 ; `$i2的值: $i2" # 调试行 if ($i1 -eq $i2) { echo "Values are the same" } else { echo "Values are NOT the same" } } compare_items($item1, $item2)
执行后会看到输出:$i1的值: bill bill ; $i2的值:,说明$i1接收的是包含两个字符串的数组,$i2为空。这也是你强制转[string]没用的原因——数组转成字符串后是"bill bill",依然和$null不相等。
内容的提问来源于stack exchange,提问作者DanEvans
相关产品推荐
相关产品推荐

