Parsing Powershell:引用解析的不一致/奇怪行为?

Parsing Powershell:引用解析的不一致/奇怪行为?,parsing,powershell,double-quotes,Parsing,Powershell,Double Quotes,全部!我正试图使用PowerShell编译一个程序,但该命令被奇怪地解析。 此命令在cmd.exe中正确执行: dmd -od"bin" -of"bin\convHull.exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d" "src\pointLogic.d" "src\quickHull.d" "src\stupidHull.d" -D -O -release 但PowerShell将其执行为:(蓝色,海军,显示在Pow

全部!我正试图使用PowerShell编译一个程序,但该命令被奇怪地解析。 此命令在cmd.exe中正确执行:

dmd -od"bin" -of"bin\convHull.exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d" "src\pointLogic.d" "src\quickHull.d" "src\stupidHull.d" -D -O -release
但PowerShell将其执行为:(蓝色海军,显示在PowerShell ISE中的紫色文本)

dmd-od“bin”-of“bin\convHull.exe”-I“src”“src\concSort.d”“src\fileParser.d”“src\main.d”“src\pointLogic.d”“src\quickHull.d”“src\stupidHull.d”-d-O-release

这会导致以下错误:

The string starting:
At line:1 char:147
+ dmd -od"bin" -of"bin\convHull.exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d"     
"src\pointLogic.d" "src\quickHull.d" "src\stupidHull.d <<<< " -D -O -release
is missing the terminator: ".
At line:1 char:163
开始的字符串:
第1行字符:147
+dmd-od“bin”-of“bin\convHull.exe”-I“src”“src\concSort.d”“src\fileParser.d”“src\main.d”

“src\pointLogic.d”“src\quickHull.d”“src\stupidHull.d我认为这应该可以解决问题(添加新行只是为了清楚起见,并删除额外的引号):

注意,在将引号(“)作为参数本身的一部分传递的情况下,我用单引号(')包围了整个参数。从下面的实验可以看出,只有“…”
中的
-需要引用它

快乐编码


我找不到关于这一确切生产的好参考,但请注意以下部分:

-x"w." -> error: " expected (last " is special) -x"w."" -> -x"w and ."" (the . starts a new token and the " in that starts a quote; however, the quotes are not removed) '-x"w."' -> -x"w." (extra quote fine, neither special) -x"w" -> -x"w" (no . and " not special) -x"w"" -> -x"w"" (no . and " not special) a".b" -> a.b (didn't start with `-`, quotes removed) a".b -> error: " expected (" is special)
但是,这充其量是不完整的,甚至不包括“字母”的定义。

我没有可执行文件,但这似乎是可行的

 $cmd = @'
 dmd -od"bin" -of"bin\convHull.exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d" "src\pointLogic.d" "src\quickHull.d" "src\stupidHull.d" -D -O -release
 '@

 &$cmd

回答得很好。我对第四个和第五个例子有些惊讶。我还得进一步研究一下解析器。可能是缺少标点符号?@JasonMArcher the“在第4个和第5个示例中并不特别,因为它是以
-
开头的标记的一部分。但是,
字符似乎会终止以
-
开头的标记。第6个示例将我带回(在整理了
业务之后),因为我没有意识到引号会被删除(因为引号没有开始标记,结果仍然是单个标记)。如果微软发布官方(完整的)语法/标记化规则,情况真的会如此。+1用于使用D语言:-)
<ParameterToken> = -[:letter:]+[:]{0 |1}
 $cmd = @'
 dmd -od"bin" -of"bin\convHull.exe" -I"src" "src\concSort.d" "src\fileParser.d" "src\main.d" "src\pointLogic.d" "src\quickHull.d" "src\stupidHull.d" -D -O -release
 '@

 &$cmd