BASH 文本模版的简单实现 micro_template_compile

来源:互联网 发布:剑三正太捏脸数据截图 编辑:程序博客网 时间:2024/06/06 15:00

具体代码

################################# 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


0 0
原创粉丝点击