繁体   English   中英

如何在 Matlab 的 system() 命令中包含双引号

[英]How to include double quote in Matlab's system() command

我需要将文件名作为输入传递给包含空格的 powershell 命令。 因此,我希望包括双引号。

但是,当将 arguments 传递给 powershell 时,Matlab “吃掉”了system()输入中的所有双引号。

例如,请注意下面的示例如何都相同 output。

>> system('powershell.exe echo a c','-echo')
a 
c 
ans =
     0
>> system('powershell.exe echo "a c"','-echo')
a 
c 
ans =
     0
>> system('powershell.exe echo ""a c""','-echo')
a 
c 
ans =
     0
>> system(['powershell.exe echo ',char(34),'a c',char(34)],'-echo')
a 
c 
ans =
     0

powershell 中echo "ac"的实际 output 是单行中a c 换行只发生在没有双引号的情况下。

只是为了实验,我还尝试了""ac"" ,预期的输入与更改线相同,a,更改线,c。 随着返回,似乎所有双引号都被 Matlab “吃掉”了。

使用system()时如何带回双引号?

吃掉你的双引号的是PowerShell

  • 您正在通过-Command ( -c ) 参数(在您的案例中隐含位置)将命令(一段 PowerShell 代码)传递给 PowerShell CLI

  • "应被视为命令一部分的字符必须转义为\" (原文如此)

    • 转义"不起作用的原因是 PowerShell 认为它们仅在命令行上具有语法 function - 在所有 arguments 已被解释后,它们被简单地剥离;并解析结果字符串,最终解释为作为 PowerShell 代码。
  • 虽然在您的命令中使用\"可以解决问题,但建议将传递的整个命令包含在"..."中,因为这样可以防止可能不需要的空白规范化

system('powershell.exe " echo \"a c\" "', '-echo')

警告

  • Since MatLab's system() function executes the given command line via cmd.exe (which is inefficient in your case, since you don't need shell functionality), use of \" can break the invocation, due to how cmd.exe 's解析命令行。

  • 避免涉及cmd.exe时出现极端情况,请将整个命令括在"...."中并转义通过" ,如下所示:

    • 调用powershell.exe时使用"^"" (原文如此)( Windows PowerShell CLI)
    • 调用pwsh.exePowerShell (Core) 7+ CLI)时使用""
    • 有关更多信息,请参阅此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM