PowerShell中能否将数值管道传输至变量存储的switch语句?
问题解答
你这种写法不可行,原因是iex($com)执行字符串中的switch代码时,管道传入的数值并没有被正确绑定到switch的输入变量$_上。$_在当前iex的执行上下文里,并不会自动引用管道左侧的对象,所以switch无法接收到传入的1,自然不会输出对应的结果。
正确的实现方式
方式1:使用脚本块(推荐)
把$com定义为脚本块而不是字符串,这样可以直接通过管道传递输入:
$com = { switch ($_) { 1 {"It is one."} 2 {"It is two."} 3 {"It is three."} 4 {"It is four."} } } # 执行方式 1 | & $com
运行后会输出It is one.,符合预期。
方式2:修改字符串代码适配管道输入
如果一定要用字符串形式的代码,需要让switch明确接收管道的输入,比如修改$com的内容:
$com = ' switch ($input) { 1 {"It is one."} 2 {"It is two."} 3 {"It is three."} 4 {"It is four."} } ' # 执行方式 1 | iex $com
这里$input是PowerShell中代表管道输入的自动变量,switch会读取这个变量的值进行匹配。
或者也可以给字符串代码添加参数,显式传递管道对象:
$com = ' param($val) switch ($val) { 1 {"It is one."} 2 {"It is two."} 3 {"It is three."} 4 {"It is four."} } ' # 执行方式 1 | iex $com -val $_
内容的提问来源于stack exchange,提问作者I am Jakoby
相关产品推荐
相关产品推荐

