Bash上的反向勾号的cmd / PowerShell是什么?


Answers:


140

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使用(现在未使用的)反引号进行转义。


23
像这样的阅读答案非常棒,您可以在其中学习事物的方式和原因。谢谢!(如果可以的话,我会+10。)
PEZ

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

您可能需要将定界符设置为默认值以外的其他值,具体取决于输出的外观和使用方式。有关更多详细信息,请参阅https://technet.microsoft.com/zh-cn/library/bb490909.aspx的FOR文档。


2
笨拙,与它的超级优雅bash不同: for x in `./print_5_As.rb`; do echo %x; done
jordanpg

5
@jordanpg,您似乎错过了在这种情况下不将FOR用于循环的观点。bash等效项仍将与原始帖子中相同,没有任何for循环。
matli 2015年

如果输出包含空格,则仅回显print_5_As.rb输出的第一个“单词”。
Gnubie

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.