msbuild - sed命令错误 - 如何包含单引号和双引号
问题描述:
我有一个GNU makefile
,我正在翻译为MSBuild
。msbuild - sed命令错误 - 如何包含单引号和双引号
有包含与该是应该关闭Command
属性Exec
任务的单引号干扰sed
不会在MSBuild
运行,因为它包含了'
(单引号)命令:
<Target Name="prebuild_cat">
<Exec
EchoOff="true"
StandardOutputImportance="low"
StandardErrorImportance="low"
IgnoreExitCode="true"
ConsoleToMSBuild="true"
Command=' $(GnuSed) 's/^Q(.*)/"&"/'
'>
</Exec>
</Target>
当我运行这个,Visual Studio说
错误MSB4025:该项目文件无法加载。 's'是一个意想不到的标记。期待空白。行244,位置25.
当我更换'
与'
和"
与"
<Target Name="prebuild_cat">
<Exec
EchoOff="true"
StandardOutputImportance="low"
StandardErrorImportance="low"
IgnoreExitCode="true"
ConsoleToMSBuild="true"
Command=' $(GnuSed) 's/^Q(.*)/"&"/'
'>
</Exec>
</Target>
错误MSB4025:项目文件无法加载。解析EntityName时发生错误。
答
的MSBuild - sed的命令错误 - 如何将单引号和双引号
根据该文件MSBuild Special Characters:
的MSBuild保留一些字符在特定情境下的特殊用途。如果你想在保留它们的上下文中直接使用它们,你只需要转义这些字符。
要转义特殊字符,请使用语法%xx,其中xx表示字符的ASCII十六进制值。
在这种情况下,单引号是ASCII字符39,即十六进制27。而对于&值是26,所以正确的转义序列是:
'$(GnuSed) %27s/^Q(.*)/"%26"/%27'
下面是我的测试样品,你可以检查它是否适合你:
<Target Name="prebuild_cat" AfterTargets="Build">
<Message Text='$(GnuSed) %27s/^Q(.*)/"%26"/%27' Importance='high' />
</Target>
结果在输出窗口:
1>prebuild_cat:
1> 's/^Q(.*)/"&"/'
1>
1>Build succeeded.
+0
替换'&'它也可以使用'&''"'''' – Adrian
此问题的任何更新?你解决了这个问题吗?如果没有,请让我知道这个问题的最新状态。 –
@ Leo-MSFT我选择了一个答案:我的问题是我忘记用'&' – Adrian