使用 Powershell 中的 Stack,如何传递包含 space 的测试参数?

Using Stack from Powershell, how do I pass test arguments that include a space?

当 运行ning tasty 测试出栈时,我需要将字符串 "fail log" 作为 tasty 模式参数传递。

这在 bash 中非常简单:

PS C:\Pyrethrum> stack test --fast --ta "-p \"fail log\""

但是尝试使用 Powershell 实现同样的效果让我抓狂:


PS C:\Pyrethrum> stack test --fast --ta "-p ""fail"" "

在没有 space

时有效(运行s 测试)

PS C:\Pyrethrum> stack test --fast --ta "-p ""fail log"" "

解析目标时出错:找不到目录:日志


PS C:\Pyrethrum> stack test --fast --ta "-p `"fail log`""

尝试安装一个名为 log

的包

PS C:\Pyrethrum> stack test --fast --ta "-p \"fail log\""

选项--ta:未终止的字符串:endOfInput


PS C:\Pyrethrum> stack test --fast --ta "-p /fail log/ "

...构建但模式需要引号

pyrethrum-0.1.0.0:测试(套件:pyrethrum-test,参数:-p /fail log/)

选项 -p:无法解析模式


在 Powershell 中将此设置为 运行 的正确命令行是什么?

不幸的是,PowerShell 向外部程序传递参数的方式至少在 PowerShell 7.2.x 中被分解,并且要求您不仅满足 PowerShell 的 拥有关于嵌入式"的语法要求,但另外将它们转义为目标可执行文件,通常使用\:

 # `" is needed for PowerShell, \ is needed for stack
 stack test --fast --ta "-p \`"fail log\`""

由于您的外部 "..." 字符串不引用任何 PowerShell 变量并且不包含子表达式,即,由于不需要字符串插值,您可以使用 '...',一个文字 PowerShell 字符串,这简化了有点问题:

 stack test --fast --ta '-p \"fail log\"'

简而言之:要"个字符嵌入参数传递给外部程序 来自 PowerShell:

  • "..."
  • 中使用\`"
  • '...'
  • 中使用\"

有关详细信息,请参阅 ,还有关于 未来可能的修复程序 和隐藏错误的辅助函数。