如何在Bash中向MSBuild传递带通配符的复杂参数?
解决Bash中dotnet test排除规则的解析错误
在Bash环境下,[]和*属于Shell的特殊通配符字符,会被提前解析,导致你传递的Exclude参数被篡改,进而触发MSBUILD的未知开关错误。可以通过以下几种方式解决:
方法1:用单引号包裹排除规则
单引号会让Bash完全忽略内部所有特殊字符,直接将原内容传递给dotnet命令:
dotnet test //p:CollectCoverage="true" //p:CoverletOutputFormat="lcov" //p:Exclude='[*]System.Text.RegularExpressions.Generated.*'
方法2:转义特殊字符
对[、]和*分别添加反斜杠\,告诉Bash这些是普通字符而非通配符:
dotnet test //p:CollectCoverage="true" //p:CoverletOutputFormat="lcov" //p:Exclude="\[*\]System.Text.RegularExpressions.Generated.\*"
方法3:双引号内转义关键字符
如果需要保留双引号(比如参数内有空格的场景),只需转义[和]即可(最后一个*在无匹配文件时Bash通常会保留,但转义更稳妥):
dotnet test //p:CollectCoverage="true" //p:CoverletOutputFormat="lcov" //p:Exclude="\[*\]System.Text.RegularExpressions.Generated.*"
本质原因是Bash会尝试将[*]解析为字符集匹配规则,去匹配当前目录下的文件,导致实际传递给MSBUILD的参数并非你预期的格式,从而引发错误。上述方法都能让排除规则完整传递给dotnet test命令,实现和PowerShell中一致的效果。
内容的提问来源于stack exchange,提问作者Daniel Robinson
相关产品推荐
相关产品推荐

