【发布时间】:2015-10-21 10:31:18
【问题描述】:
所以我有一个实现简单液体样式模板的 bash 函数:
template () {
key=$(echo "$2" | tr -d '[:space:]')
# escape slashes
value=$(echo $3 | sed -e 's/\\/\\\\/g' -e 's/\//\\\//g' -e 's/&/\\\&/g')
echo "$1" | sed "s/{{$key}}/$value/g; s/{{$key:[^}]*}}/$value/g"
}
这样template foo bar zorp 将在给定的foo 模板中将{{bar}} 替换为zorp。
我的问题是,将此函数的输出作为值返回会导致换行符被剥离,并最终因行长限制而出现 sed 错误。有没有办法逃避换行符,让它们完整地通过模板?
【问题讨论】:
-
tr -d '[:space:]'删除换行符... -
对,但我不太关心密钥。这正是我要替换的。
-
最后一行
echo "$1" > /tmp/file; sed '...' /tmp/file怎么样?