我在脚本中使用以下部分来替换文件中的变量。
但是在运行这部分剧本后,“&”脚本忽略符号。这种行为有原因吗?
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=
我需要在命令中改变某些内容吗?
答案 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