博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BASH 文本模版的简单实现 micro_template_compile
阅读量:5235 次
发布时间:2019-06-14

本文共 2641 字,大约阅读时间需要 8 分钟。

详细代码

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

转载于:https://www.cnblogs.com/blfbuaa/p/6962160.html

你可能感兴趣的文章
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>
GIT笔记:将项目发布到码云
查看>>
JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
查看>>
JavaScript 鸭子模型
查看>>
SQL Server 如何查询表定义的列和索引信息
查看>>
GCD 之线程死锁
查看>>
NoSQL数据库常见分类
查看>>
一题多解 之 Bat
查看>>
Java 内部类
查看>>
{面试题7: 使用两个队列实现一个栈}
查看>>
【练习】使用事务和锁定语句
查看>>
centos7升级firefox的flash插件
查看>>
Apache Common-IO 使用
查看>>
评价意见整合
查看>>
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
系统的横向结构(AOP)
查看>>
linux常用命令
查看>>
NHibernate.3.0.Cookbook第四章第6节的翻译
查看>>
使用shared memory 计算矩阵乘法 (其实并没有加速多少)
查看>>