簡體   English   中英

PowerShell的調用運算符(&)語法和雙引號

[英]PowerShell's call operator (&) syntax and double-quotes

有人可以向我解釋這個結果嗎? 多年來我試圖掌握PowerShell調用命令的語法浪費了很多時間,但是這......我甚至無法猜測如何從輸入中獲得這個結果。

PS C:\Users\P> & echoargs "   ""1"" 2 3 ""4 5 6""   7 8 9"
Arg 0 is <   1 2 3 4>
Arg 1 is <5>
Arg 2 is <6   7 8 9>

Bueller?

雙引號字符串中的雙倍引號是插入雙引號的一種方式。 echoargs.exe的更新版本更清楚地顯示了這一點,因為它顯示了用於調用exe的命令行:

PS>  echoargs "   ""1"" 2 3 ""4 5 6""   7 8 9"
Arg 0 is <   1 2 3 4>
Arg 1 is <5>
Arg 2 is <6   7 8 9>

Command line:
"C:\...\Modules\Pscx\Apps\EchoArgs.exe"  "   "1" 2 3 "4 5 6"   7 8 9"

如果您使用該命令行(在PowerShell解析之后),您將在CMD.exe中獲得相同的結果:

CMD> EchoArgs.exe "   "1" 2 3 "4 5 6"   7 8 9"
Arg 0 is <   1 2 3 4>
Arg 1 is <5>
Arg 2 is <6   7 8 9>

Command line:
C:\...\Modules\Pscx\Apps\EchoArgs.exe  "   "1" 2 3 "4 5 6"   7 8 9"

至於為什么.NET或C ++啟動代碼以這種方式解析命令行,我不完全確定。 這個MSDN主題稍微介紹了一下,如果你看一下主題底部的例子,你會看到一些同樣奇怪的解析行為,例如a\\\\\\bd"ef"gh給出a\\\\\\bde fgh

請注意,在將參數傳遞給應用程序並引用所述參數時,Powershell因一些重大錯誤而聞名 - http://connect.microsoft.com/PowerShell/feedback/details/376207/executing-commands-which-require-quotes -and變量-是-幾乎不可能的

這就是我理解它是如何(錯誤)解析的:

字符串是" ""1"" 2 3 ""4 5 6"" 7 8 9"

由於這個錯誤,雙引號成為字面雙引號,從來沒有成功。

字符串就像“”1“2 3”4 5 6“7 8 9”

所以<space>1 2 3 4成為一個參數,因為它是第一個帶有匹配引號的部分,4個出現在下一個空格之前。 然后是空間,因此5成為第二個參數。 然后是空格,所以下一部分將是一個單獨的參數。 在這里,與第一個參數相同的規則,除了6在引用之前發生並且沒有空格因此6 7 8 9成為下一個參數。

底線 - 傳遞給外部應用程序的Powershell參數非常混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM