- 本文链接:https://www.cnblogs.com/woshimrf/p/shell-template-variable.html
 - 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
 
目录
我们经常使用一些模板语言来处理一些变量替换。比如jsp,php,velocity,freemarker,thymeleaf等。那对于shell来说,应该怎样替换变量呢。有一种很简单的办法可以做到。
先来看一个应用场景。在datax是阿里开源的一个异构数据源同步框架,其配置文档是json的,我想要用shell去调用执行pg到pg的数据同步,需要根据我的配置生成对应的配置文件。这如果用java来做就是维护一个对象,设置value,最后json-encode就好了。要是使用shell,这样也可以做到:
渲染脚本
#!/bin/bash  SRC_USER_NAME=etl SRC_USER_PWD=etl SRC_SQL="select * from tab" SRC_HOST_IP="192.168.1.1" SRC_HOST_PORT=3306 SRC_DB="abc_db" TAR_USER_NAME="etl2" TAR_USER_PWD="pass2" fields_map="\"a\",\"b\",\"c\"" TAR_HOST_IP="aaaadfsdfdsfjsdjf" TAR_HOST_PORT="5432" TAR_DB="tar_db" TAR_TABLENAME="tbname" eval "cat <<EOF $(< pg2pg.datax.json) EOF "  > result.json模板文档
pg2pg.datax.json
{     "job": {         "setting": {             "speed": {                 "byte": 1048576             },             "errorLimit": {                 "record": 0,                 "percentage": 0.02             }         },         "content": [             {                 "reader": {                     "name": "postgresqlreader",                     "parameter": {                         
                        
                        
                    