需要一些关于 ant 和 shell 脚本的帮助。我需要打开一个 shell 脚本并使用 ant 将一些值附加到 shell 脚本的属性中。
下面是我用蚂蚁写的代码——
<property name="args" value="${ARGS}"/>
<replaceregexp file="abc.sh"
match="ARGS=(.*)"
replace="ARGS=${args} some_value=true"
byline="true"
flags="i" />
我面临的问题是 ARGS 的值 abc.sh 格式为 ARGS="value"
此代码的输出为 -ARGS="value" some_value=true
预期输出为 -ARGS="value some_value=true"
请在这里帮助我。
我所知,你可以只用<replaceregexp>
来得到你想要的东西。不需要${args}
或${ARGS}
属性。
在XML中,属性值可以用引号("
)或单引号('
)括起来。在以下示例中...
match="..."
replace="..."
。成为。。。
match='...'
replace='...'
引号已替换为单引号。使用单引号使我们能够轻松地在<replaceregexp>
的match
和replace
属性中使用引号:
<replaceregexp
file="abc.sh"
match='ARGS="([^"]*)"'
replace='ARGS="1 some_value=true"'
byline="true" />
正则表达式 ARGS="([^"]*)"
将匹配以 ARGS="
开头的字符串。然后,非引号 ( "
) 的字符将被匹配并存储在捕获组 1 中。最后,正则表达式将匹配尾随引号。
在 replace
属性中,1
将替换为 match
属性中捕获组 1 的内容。
下面是一些测试用例...
原 abc.sh
IRRELEVANT_LINE_1="irrelevantValue1"
ARGS="value"
IRRELEVANT_LINE_2="irrelevantValue2"
已替换 abc.sh
IRRELEVANT_LINE_1="irrelevantValue1"
ARGS="value some_value=true"
IRRELEVANT_LINE_2="irrelevantValue2"