2013-04-08 104 views
0

我在脚本中使用下面的部分来替换文件中的变量。

但是在运行这部分脚本之后,脚本会忽略“&”符号。是否有这种行为的原因?

while read line 
    do 
    eval echo "$line" >> output.txt 
    done < "input" 

我输入文件看起来像下面

XXX.6.ID=LCPR_PROJ& 
XXX.6.VALUE=$PMS& 
XXX.6.CTID=58& 
XXX.6.ECID=1032& 
XXX.6.SEC= 

运行该命令后,我的输出看起来像下面

XXX.6.ID=LCPR_PROJ 
XXX.6.VALUE=132 
XXX.6.CTID=58 
XXX.6.ECID=1032 
XXX.6.SEC= 

我需要改变我的命令的东西吗?

回答

4

你不想使用eval

eval将单独评估表达式,并解释&字符。

&字符告诉bash在子shell中运行该命令。从Bash man page

如果一个命令是由操作者控制终止&,壳执行在子shell后台命令。

从脚本

while read line 
    do 
    echo "$line" >> output.txt 
    done < "input" 

拆下,预期它会奏效。

如果希望通过eval运行的每一行,你知道你在做什么,那么你将不得不手动检测和逃避& S:

while read line; do 
    line=${line/&/\\&} 
    eval echo "$line"; 
done 

通过使用bash's string manipulation

+0

+1我在op的帖子中没有看到eval! :D – Kent 2013-04-08 12:11:11

+0

感谢您的信息 – user2190101 2013-04-08 13:11:25