问题描述
关于linux中变量$foo在“”引号中的问题
现在从命令行获取了一个传入参数$1,假设$1的值为666想把$1用在sed -i中,假设指令为sed -i “s/foo/$1/g” file.txt现在需要写一个ant的build.xml(可以理解为一个脚本),需要实现sed这条指令:
<exec executable='/usr/bin/sed' dir='common/self_cleaning_builder'> <arg line='#我需要的那条sed指令'/></exec>我应该如何把这个sed指令放入arg标签下的line=“”中,才能使得我放进去的指令可以被正确读出且实现功能?引号太多了,怎么写都实现不了功能。
我写的是:
<exec executable='/usr/bin/sed' dir='/common'> <arg line=’-i -r 's/foo/$1/g' file.txt’/></exec>
以及
<property name='regex' value='s/input/$1/g'/><exec executable='/usr/bin/sed' dir='/common'> <arg line='-i -r $regex file.txt'/></exec>
但都无法实现我要的功能。
看了一些讲“”和‘’的帖子还是不知道应怎么解决这个问题,还望各位赐教
问题解答
回答1:自己写一个sed的wrapper就行,你这样直接使用sed会首先获取到参数,并且认为那是一个文件,$1就起不了作用了
回答2:$1在shell脚本里是输入参数,但在ant脚本里不是,另外你在命令行调用ant的时候,不可能按位置传参数,必须要指定参数名:
ant <your target> -Darg1=value1
在ant脚本里使用${arg1}来访问变量:
<arg line='-i -r ’s/foo/${arg1}/g’ file.txt'/>