电源外壳开关语句字符串匹配不起作用



我在使用Powershell脚本中获取简单的switch语句时遇到问题。以前一直在使用嵌套if,并希望清理一下。代码如下。

当我在调试中通过Powershell ISE并评估测试时(例如$_ -match 'match1') 它确实根据$mystring的值按预期计算为 true。 但是,它似乎从未正确执行与 Switch 块中的该值关联的代码。 我确定我错过了一些明显的东西,并感谢任何指导。 希望我的描述有意义。 我正在运行 v5.1。

Switch ($myString)
{
($_ -match 'match1') { somecodeblock }
($_ -match 'match2') { somecodeblock }
($_ -match 'match3') { somecodeblock }
($_ -match 'match3') { somecodeblock }
($_ -match 'match4') { somecodeblock }
($_ -match 'match4') { somecodeblock }
}

正确的语法是在使用 $_ 时在测试周围使用大括号(您当前使用的是括号):

Switch ($myString)
{
{$_ -match 'match1'} {somecodeblock}
}

当您不使用 $_ 时,可以从测试中完全省略它们,如果您使用 -wildcard 参数,则可以执行此操作:

Switch -wildcard ($myString)
{
'*match1*' {somecodeblock}
}

switch 语句的正确用法是:

Switch -regex ($myString)
{
'match1' {somecodeblock}
'match2' {somecodeblock}
}

最新更新