【发布时间】:2015-06-18 21:05:11
【问题描述】:
我在 shell 脚本中实现了一个模板渲染器。模板变量在模板中由@VAR_NAME@ 表示,它们的值在单独的shell 脚本中定义。
示例代码:
# template variables values
CONTACT_EMAIL="myemail"
CONTACT_NAME="myname"
VARS="CONTACT_EMAIL CONTACT_NAME"
TEMPLATE_FILEPATH="mytemplate.txt"
# template renderer
set -x
SEDARGS=
for VAR in $VARS; do
SEDARGS+=" -e \"s,@$VAR@,${!VAR},\""
done
sed -r $SEDARGS $TEMPLATE_FILEPATH
由于“set -x”而由shell执行并打印的sed命令:
+ sed -r -e '"s,@CONTACT_EMAIL@,myemail,"' -e '"s,@CONTACT_NAME@,myname,"' mytemplate.txt
sed 输出:
sed: -e expression #1, char 1: unknown command: `"'
我知道每个 sed 表达式周围的单引号会导致这个不直观的错误消息,但我不知道为什么要添加它们。
怎么了?
【问题讨论】:
-
Is it possible to escape regex metacharacters reliably with sed 的可能重复项...我的意思是可能,我希望链接有所帮助。
-
SEDARGS+=" -e 's,@$VAR@,${!VAR},' "可能会起作用。有趣的想法!祝你好运。