如何在 PowerShell 中提供包含变量值和引号的命令行参数?

How to provide a command line argument containing a variable value and quotation marks in PowerShell?

在 PowerShell 中,我想提供一个包含文字引号的命令行参数 加上 一个 PowerShell 变量值。

我知道 this question and its answers,但它似乎没有提供一种方法来启用字符串插值,同时还取消了文字引号。

综合示例:

我想从命令行执行这行 ruby 代码:puts "'u'=<my-user-provided-from-the-shell>"。 (请注意,这是一个合成示例。我知道我可以在 ruby 中获取用户名。我知道我可以更改代码,因此它实际上不需要双引号。对于这个示例,我想执行这一行代码)

在 cmd 中,我会这样做:

> ruby -e "puts \"'u'=%USERNAME%\""

它按预期工作。

我能以某种方式从 powershell 发送完全相同的参数吗?

> ruby -e "puts \"`'u`'=$env:USERNAME\""

无效。它失败并生成无效的 ruby 代码。第一个引号进入了,但是第二个引号中的 \ 进入了

> ruby -e 'puts \"''u''=$env:USERNAME\"'

没有失败,但是 $env:USERNAME 没有扩展。

甚至可以在单个命令行参数中同时传递文字双引号和变量值吗?

感谢 Abra who posted this link 我能够想出一个使用子表达式运算符的解决方案:

> ruby -e "puts $('\"')'u'=$env:USERNAME$('\"')"

使用 $('\"') 看起来是此类问题的最终答案。不知道为什么其他相关问题没有贴出来