无论你想如何称呼它,我正在尝试找到一种方法,将现有字符串的内容作为双引号字符串进行评估。例如,如果我创建以下字符串:
然后,
$string = 'The $animal says "meow"'
$animal = 'cat'
然后,
Write-Host $string
将会输出 The $animal says "meow"
。我该如何重新评估 $string,以输出(或分配给一个新的变量)The cat says "meow"
?
很烦人...评论的限制使得包含反引号代码非常困难(如果可能的话)。这里是我对zdan下面最后两条评论的未篡改版本:
----------
实际上,经过思考,我意识到期望The $animal says "meow"
在插值时不转义双引号是不合理的,因为如果一开始就是双引号字符串,如果不转义双引号,评估将会中断。所以我想答案应该是一个两步过程:
$newstring = $string -replace '"', '`"'
iex "`"$string`""
最后一句话留给后人:我尝试过将所有内容放在一行上,几乎任何你认为可行的方法都会在输入iex之后出现问题,但是以下方法可以实现:
iex ('"' + ($string -replace '"', '`"') + '"')
$ExecutionContext.InvokeCommand.ExpandString($string)
返回The cat says meow
,而不是The cat says "meow"
,除非双引号被转义。 - Adi InbarExpand-String
cmdlet来处理版本差异。它在这里的Github上。 - alx9r