eval echo“$ line”忽略'&'符号

时间:2013-04-08 12:02:17

标签: bash

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

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

 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=

我需要在命令中改变某些内容吗?

1 个答案:

答案 0 :(得分:4)

您不想使用eval

eval将分别评估表达式,并解释&字符。

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

  

如果命令被控制操作符&amp;终止,则shell在子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