转义 ant 文件中的引号字符

Escape quote character in ant file

我正在尝试检索 class Core.java 中定义的字符串,如下所示:

public static final String PLATFORM_VERSION = "3.0.1_170518";

所以我创建了一个测试 ant 文件(因为我想将它存储为一个 ant 属性 以便在编译过程中使用)。

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="get-core-version" name="test">

<target name="get-core-version">
    <exec executable="bash"
        outputproperty="coreVersionTemp"
        failonerror="true">
        <arg value="-c"/>
        <arg value="cat ./Core.java | grep VERSION"/>
    </exec>
    <echo message="&quot;ResultadoIntermedio&quot;: ${coreVersionTemp}"/>
    <exec executable="bash"
        outputproperty="coreVersion"
        failonerror="true">
        <arg value="-c"/>
        <arg value="echo ${coreVersionTemp} | cut -d'\&quot;' -f2"/>
    </exec>
    <echo message="Resultado: ${coreVersion}"/>
</target>      

ant 代码被拆分以准确定位失败的位置。蚂蚁returns:

Buildfile: E:\git\test.xml

get-core-version:
     [echo] "ResultadoIntermedio":     public static final String PLATFORM_VERSION = "3.0.1_170518";

BUILD FAILED
E:\git\test.xml:14: exec returned: 1

Total time: 0 seconds

如您所见,错误出在 'cut' 命令上。 ResultadoIntermedio 是正确的。 如果我们在 bash 上执行完整命令,我们也会得到预期的结果:

$ cat ./Core.java | grep VERSION | cut -d '"' -f2
3.0.1_170518

我认为问题出在 cut 的 -d 选项之后的转义字符中。 我试过:

'"'
'\"'
\'\"\'
'&quot;'
\'&quot;\'
&apos;&quot;&apos;

还有其他一些组合...我怎样才能正确地做到这一点?

非常感谢。

将 属性 中的 '"' 替换为 ':' 的变通方法工作正常,但这是一个有点讨厌的解决方案。

    <target name="get-core-version">
    <exec executable="bash"
        outputproperty="coreVersionTemp"
        failonerror="true">
        <arg value="-c"/>
        <arg value="cat ./Core.java | grep VERSION"/>
    </exec>
    <echo message="&quot;ResultadoIntermedio&quot;: ${coreVersionTemp}"/>
    <!-- <propertyregex property="coreVersionTemp2" input="coreVersionTemp" regexp="&quot;" replace=":" global="true"/> -->
    <script language="javascript">
        var temp = project.getProperty("coreVersionTemp");
        project.setProperty("coreVersionTemp", temp.replaceAll("\"", ":"));
    </script>
    <echo message="&quot;ResultadoIntermedio2&quot;: ${coreVersionTemp}"/>
    <exec executable="bash"
        outputproperty="coreVersion"
        failonerror="true">
        <arg value="-c"/>
        <arg value="echo '${coreVersionTemp}' | cut -d: -f2"/>
    </exec>
    <echo message="Resultado: ${coreVersion}"/>
</target>      
</project>