首页  >  问答  >  正文

shell - 关于linux脚本中$变量在字符串“”和‘’中使用的问题

关于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//g" file.txt'/>
</exec>

以及

<property name="regex" value="s/input//g"/>
<exec executable="/usr/bin/sed" dir="/common">
    <arg line="-i -r $regex file.txt"/>
</exec>

但都无法实现我要的功能。

看了一些讲“”和‘’的帖子还是不知道应怎么解决这个问题,还望各位赐教

女神的闺蜜爱上我女神的闺蜜爱上我2688 天前859

全部回复(2)我来回复

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-07-03 11:43:33

    自己写一个sedwrapper就行,你这样直接使用sed会首先获取到参数,并且
    认为那是一个文件,就起不了作用了

    回复
    0
  • PHP中文网

    PHP中文网2017-07-03 11:43:33

    $1在shell脚本里是输入参数,但在ant脚本里不是,另外你在命令行调用ant的时候,不可能按位置传参数,必须要指定参数名:

    ant <your target> -Darg1=value1

    在ant脚本里使用${arg1}来访问变量:

    <arg line="-i -r 's/foo/${arg1}/g' file.txt"/>

    回复
    0
  • 取消回复