提问人:I am Jakoby 提问时间:12/1/2022 最后编辑:Santiago SquarzonI am Jakoby 更新时间:12/1/2022 访问量:79
我可以通过管道进入存储在变量中的 switch 语句吗?
Can I pipe into a switch statement stored in a variable?
问:
我有一个存储 switch 语句的变量
$com = '
switch ($_)
{
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
'
我正在尝试输入数字以运行 switch 语句
像这样:
1 | iex($com)
答:
3赞
Santiago Squarzon
12/1/2022
#1
您的选择包括:
$com = {
process {
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
}
}
function thing {
process {
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
}
}
1..3 | & $com
1..3 | thing
- 一个
过滤器
,功能完全相同:
filter thing {
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
}
1..3 | thing
- 使用
ScriptBlock.Create
方法(这需要字符串表达式中的块):process
$com = '
process {
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
}
'
1..3 | & ([scriptblock]::Create($com))
- 使用
ScriptBlock.InvokeWithContext
方法和自动变量$input
,此技术不会流式传输,并且还需要一个外部才能工作,它只是为了展示,应该作为一个选项丢弃:scriptblock
$com = '
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
'
1..3 | & { [scriptblock]::Create($com).InvokeWithContext($null, [psvariable]::new('_', $input)) }
- 使用
Invoke-Expression
,还需要一个带有块的外部(应该丢弃 - 从上面显示的所有技术来看,这是最糟糕的技术,正在评估通过管道传递的每个项目的字符串表达式):scriptblock
process
$com = '
switch ($_) {
1 { "one." }
2 { "two." }
3 { "three." }
}
'
1..3 | & { process { Invoke-Expression $com } }
评论