首先,请原谅我,因为我是PowerShell的新手。
我试图找到一种方法来给予下面的switch语句:
Switch ($a)
{
{$_ -eq "option1" -or $_ -eq "option2"}{Do the same thing...}
}
有没有一种方法可以将{$_ -eq "option1" -or $_ -eq "option2"}
子句更改为“if $a in this list”(但显然不只是使用if
,否则我还不如直接替换开关)。
在这个switch语句中最终会有许多子句,其中一些子句可能有4或5个选项,所以简洁会有很大帮助,否则它将是一个很大的语句。
4条答案
按热度按时间o4tp2gmn1#
您可以使用
-in
或-contains
包含运算符来简化条件:如果你有一个非常大的列表要比较,并且有很多项目要用
switch
处理,你可以考虑使用HashSet<T>
中的.Contains
方法来快速查找:jexiocij2#
在这种情况下,我会选择Regex开关
使用正则表达式为您提供了更多的比较选项。例如:
$a
中的字符串需要区分大小写进行检查,您可以将参数-CaseSensitive
添加到开关cmd中。$a
中的字符串需要作为“整个单词”进行检查,则可以执行'^(option1|option2)$'
。(^
和$
是从字符串开始到字符串结束的行锚点)$a
中的值需要包含一个单词作为整个单词do'\b(option1|option2)\b'
(\b
表示单词边界)正如mklement0评论的那样,当使用正则表达式时,你需要确保你测试的单词在正则表达式中有特殊含义的所有字符(见下表)都用反斜杠**转义。
假设你的值有点,那么最简单的方法是在每个单词上使用
[regex]::Escape()
,然后将它们与正则表达式OR字符(|
)组合,如下所示:Regex中的特殊字符
ycggw6v23#
你是PowerShell的新手,那么看看这里:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_switch
使用匹配列表可以通过这种方式轻松管理。
0md85ypi4#
-eq的左边可以是一个列表: