簡體   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