78

重定向命令输出:

例如:

echo "Foo `./print_5_As.rb`"

会回显“Foo AAAAA”

4

3 回答 3

150

PowerShell 语法基于 POSIX ksh 语法(有趣的是,它基于任何 Microsoft 的语言,如 CMD.EXE、VBScript 或 Visual Basic for Applications),所以很多东西的工作方式与 Bash 中的几乎相同。在您的情况下,命令替换是通过

echo "Foo $(./print_5_As.rb)"

在 PowerShell 和 Bash 中。

Bash 仍然支持古老的方式(反引号),但 PowerShell 清理了语法并删除了冗余结构,例如两种不同的命令替换语法。这为 PowerShell 中的不同用途释放了 反斜杠:在 POSIX ksh 中,反斜杠用作转义字符,但在 PowerShell 中这将非常痛苦,因为反斜杠是 Windows 中传统的路径组件分隔符。因此,PowerShell 使用(现在未使用的)反引号进行转义。

于 2009-01-12T03:00:42.547 回答
28

在 PowerShell 中,您使用 $( ) 来评估子表达式...

例如:

PS C:\> "Foo $(./print_5_As.rb)"
Foo AAAAA
于 2009-01-12T01:33:13.800 回答
26

在 CMD.EXE 中没有直接的等价物。但是你可以使用 FOR 命令来实现你想要的。

执行以下操作:

FOR /F "usebackq" %x IN (`./print_5_As.rb`) DO @echo Foo %x

或者

FOR /F %x IN ('"./print_5_As.rb"') DO @echo Foo %x

您可能需要将 delimiter 设置为默认值以外的其他值,具体取决于输出的外观以及您希望如何使用它。有关更多详细信息,请参阅https://technet.microsoft.com/en-us/library/bb490909.aspx上的 FOR 文档

于 2009-01-12T00:13:24.803 回答