linux shell脚本 eval 执行变量中有小于号如何处理
在做一个文本模板生成功能时遇到本SHELL定义的变量替换模板文件中变量标识符的问题
以下为简化版脚本。功能要求两个模板文件详见16:19分隔线以下内容。
t_content="http://HelloWorld.com";
# t_file的值实际是从模板文件读出,所以为单引号不能直接替换变量
t_file='<a href="${t_content}">${t_content}</a>';
# 实现方法
eval t_result=$(echo "${t_file}");
# 期望结果
echo ${t_result};
期望可以打印出
<a href="http://HelloWorld.com">http://HelloWorld.com</a>
实际会提示执行出错
-bash: syntax error near unexpected token `newline'
改为以下 内容不会出错
t_content="http://HelloWorld.com";
t_file='==${t_content}==!!';
eval t_result=$(echo "${t_file}");
echo ${t_result};
请各位同学帮忙修改实现方法,成分感谢。
16:19
本脚本实现功能为根据模板生成html文件
文件夹结构为:
mail.htm 模板文件,生成的html文件基于此模板文件结构添加变量实现
<html><body>
<p>${title}</p>
<a href="${addr}">${addr}</a>
<table></table>
</body></html>
mail.ini 配置文件,用于配置模板文件使用的值内容
title=这是一个测试脚本
addr=http://HelloWorl.com
runtask.sh 执行脚本,用于执行模板值替换
#!/bin/bash
source ./mail.ini
content=""
> ./target.html
while read line;
do
# 此处为本问题发生点,用于替换模板文件中的变量
# 考虑到后期模板文件会很大,ini配置文件中变量会非常多,所以无法固定死。
eval content=$(echo "${line}")
echo ${content} >> ./target.html
done < ./mail.htm
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
以16:19分隔符为界修改后脚本如下:
本脚本实现功能为根据模板生成html文件
文件夹结构为:
mail.htm 模板文件,生成的html文件基于此模板文件结构添加变量实现
mail.ini 配置文件,用于配置模板文件使用的值内容
runtask.sh 执行脚本,用于执行模板值替换
没那么复杂。
可以这样试试: