以下代码按预期工作:
'John' | % { "$_ $_" }
> John John
但是,我无法找到一种将字符串$_ $_
存储在变量中的方法,该变量稍后在管道中使用:
$f = '$_ $_'
'John' | % { $f }
> $_ $_
我将如何"插入"一个变量,而不是使用双引号字符串?
答案 0 :(得分:5)
您可以使用大括号括起来定义PowerShell ScriptBlock
,然后使用.
调用运算符执行它。
$f = { $_ $_ }
'John' | % { . $f }
输出如下:
John
John
或者,如果你想要一个字符串(比如你的初始问题),你可以这样做:
$f = { "$_ $_" }
'John' | % { . $f };
输出如下:
John John
答案 1 :(得分:2)
答案是
'John' | % { $ExecutionContext.InvokeCommand.ExpandString($f) }
> John John
感谢Bill_Stewart回答PowerShell Double Interpolation。