转义 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=""ResultadoIntermedio": ${coreVersionTemp}"/>
<exec executable="bash"
outputproperty="coreVersion"
failonerror="true">
<arg value="-c"/>
<arg value="echo ${coreVersionTemp} | cut -d'\"' -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 选项之后的转义字符中。
我试过:
'"'
'\"'
\'\"\'
'"'
\'"\'
'"'
还有其他一些组合...我怎样才能正确地做到这一点?
非常感谢。
将 属性 中的 '"' 替换为 ':' 的变通方法工作正常,但这是一个有点讨厌的解决方案。
<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=""ResultadoIntermedio": ${coreVersionTemp}"/>
<!-- <propertyregex property="coreVersionTemp2" input="coreVersionTemp" regexp=""" replace=":" global="true"/> -->
<script language="javascript">
var temp = project.getProperty("coreVersionTemp");
project.setProperty("coreVersionTemp", temp.replaceAll("\"", ":"));
</script>
<echo message=""ResultadoIntermedio2": ${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>
我正在尝试检索 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=""ResultadoIntermedio": ${coreVersionTemp}"/>
<exec executable="bash"
outputproperty="coreVersion"
failonerror="true">
<arg value="-c"/>
<arg value="echo ${coreVersionTemp} | cut -d'\"' -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 选项之后的转义字符中。 我试过:
'"'
'\"'
\'\"\'
'"'
\'"\'
'"'
还有其他一些组合...我怎样才能正确地做到这一点?
非常感谢。
将 属性 中的 '"' 替换为 ':' 的变通方法工作正常,但这是一个有点讨厌的解决方案。
<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=""ResultadoIntermedio": ${coreVersionTemp}"/>
<!-- <propertyregex property="coreVersionTemp2" input="coreVersionTemp" regexp=""" replace=":" global="true"/> -->
<script language="javascript">
var temp = project.getProperty("coreVersionTemp");
project.setProperty("coreVersionTemp", temp.replaceAll("\"", ":"));
</script>
<echo message=""ResultadoIntermedio2": ${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>