zoukankan      html  css  js  c++  java
  • BASH 文本模版的简单实现 micro_template_compile

    详细代码

    ###############################
    #
    # Funciton: micro_template_compile
    #
    # Parameter:
    #    [1] => template :String
    #    [2..n] => values for placeholder as key=value
    #
    # Example:
    #    <- micro_template_compile '{code: {{error.code}}, message: "{{error.message}}"}' "error.code=127" "error.message=command not found."
    #       ---
    #    -> { code: 0, message: "" }
    ###############################
    function micro_template_compile() {
    
      template_string="$1"; shift;
      expression=""
    
      while [ $# -ne 0 ]; do
        key=$(echo "$1" | sed 's~^([^=]*)=(.*)$~1~g')
        value=$(echo "$1" | sed 's~^([^=]*)=(.*)$~2~g')
        expression="s~{{$key}}~$value~g;$expression"
        shift;
      done
    
      echo "$template_string" | sed "$expression"
    }
    
    


    使用案例

    运行

    micro_template_compile 'Hi {{name}}, it is {{date}} today and {{weather}} outside. :)
    message to you: {{message}}' 
      name='小王' date="$(date +"%Y/%m/%d")" weather="大晴天儿" message="咱们出去钓鱼吧。"
    


    输出

    Hi 小王, it is 2014/06/16 today and 大晴天儿 outside. :)
    message to you: 咱们出去钓鱼吧!



    使用到脚本中:

    #!/bin/bash
    
    #
    # Usage: $exename [options] -in templatefile key=value ...
    #
    # Examples:
    #   $exename -in ./1.txt.template -out ./1.txt f1=v1 f2=v2 f3=v3
    #   $exename -help
    #
    
    ###############################
    #
    # Funciton: micro_template_compile
    #
    # Parameter:
    #    [1] => template :String
    #    [2..n] => values for placeholder as key=value
    #
    # Example:
    #    <- micro_template_compile '{code: {{error.code}}, message: "{{error.message}}"}' "error.code=127" "error.message=command not found."
    #       ---
    #    -> { code: 0, message: "" }
    ###############################
    function micro_template_compile() {
    
      local template_string="$1"; shift;
      local expression=""
      local key=""
      local value=""
    
      while [ $# -ne 0 ]; do
        key=$(echo "$1" | sed 's~^([^=]*)=(.*)$~1~g')
        value=$(echo "$1" | sed 's~^([^=]*)=(.*)$~2~g')
        expression="s~{{$key}}~$value~g;$expression"
        shift;
      done
    
      echo "$template_string" | sed "$expression"
    }
    
    
    main() {
      template="$(cat "$arg_in")"
      eval "micro_template_compile '$template' $arg_datagroup > '$arg_out'"
      return 0
    }
    
    processargs() {
      # defaults:
      arg_in=""
      arg_out="stdout"
      arg_datagroup=""
    
      # arguments:
      while echo "$1" | grep "^-" >/dev/null 2>&1; do
        case "$1" in
          -in)
            arg_in="$2"; shift;
            ;;
          -out)
            arg_out="$2"; shift;
            ;;
        esac
        shift
      done
    
      while [ $# -ne 0 ]; do
        arg_datagroup="$arg_datagroup "$1""; shift;
      done
    
      # exports
      export arg_in arg_out arg_datagroup
    }
    
    processargs "$@"
    echo ""
    echo "arg_in=|$arg_in|"
    echo "arg_out=|$arg_out|"
    echo "arg_datagroup=|$arg_datagroup|"
    echo ""
    
    main
    
    


  • 相关阅读:
    IE浏览器兼容问题
    sublime text3插件和快捷键
    CSS3高级
    盒子模型
    css3动画
    FreeBSD port安装 *** [checksum] Error code 1
    vs 2008设置vs6.0字体
    android 无法读取lua文件问题2
    u盘安装centos6 x8664
    cocos2dx lua 路径问题的一个bug (网络整理)
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6962160.html
Copyright © 2011-2022 走看看