我有以下返回字符串的 PS 命令:
(get-date -Uformat %s).remove(10, 1).substring(5,9)
我想调用应用程序 myapp.exe
从当前目录以该 PS 命令的结果作为参数,我想在一行中完成(没有中间变量)。那是什么语法?
换句话说,我正在寻找 $(<command>)
的 Powershell 等效项在 bash 中。
最佳答案
./myapp.exe (get-date -Uformat %s).remove(10, 1).substring(5,9)
./myapp.exe
(或.\myapp.exe
)调用位于当前目录中的可执行文件myapp.exe
.- 如果
myapp.exe
位于$env:PATH
中列出的目录中,请不要使用./
\.\
前缀。 - 无论哪种方式,生成的进程在当前目录(文件系统提供程序位置)中运行。
- 如果
传递给可执行文件的参数在参数模式(参见
Get-Help about_Parsing
)中被(适本地)解析,并且如何解释给定的(空格分隔的)参数取决于它的第一个字符:因为第一个字符是
(
,所以参数被评估为一个表达式(以表达式模式解析);无论表达式的计算结果被传递给可执行文件。
第一个位置的其他特殊字符是$
、@
,以及'
和"
(请参阅下一点)。- 请注意,虽然
$(...)
- 子表达式运算符(参见Get-Help about_Operators
) - 也在这种情况下有效, 如果只计算一个 单个 表达式 ((...)
) 就太过分了——$(...)
只是如果您想传递多个语句的输出,则需要。
- 请注意,虽然
'...'
参数(单引号)的内容被视为文字,而"的内容..."
参数是一个可扩展字符串(松散地说,一个字符串,其中插入了$
前缀标记)。任何其他参数(未加引号且不以
(
、@
或$
开头的参数),通过并且很大,隐式被当作可扩展字符串处理,也就是说,就像您将它包含在"..."
中一样。关于如何在参数模式下解析未明确包含在
"..."
或'...'
中的参数的全面概述, 请参阅 this answer我的。- 对于这种情况下可能令人惊讶的行为,请参阅 this GitHub issue .
关于powershell - 如何在没有中间变量的情况下将 cmdlet 输出作为参数传递给应用程序 (.exe)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51215205/