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

1 回答 1

4

你不想用eval

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

&字符告诉 bash 在子 shell 中运行命令。从Bash 手册页

如果命令由控制运算符 & 终止,则 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 的字符串操作

于 2013-04-08T12:08:41.773 回答