100
|
Vladislav Rastrusny · 技术社区 · 14 年前 |
1
54
您可以使用:
取代一切
对于纯bash,这应该可以工作(假设变量不包含$…字符串):
. 如果rhs引用某个引用自身的变量,则不会挂起的解决方案: #!/bin/bash line="$(cat; echo -n a)" end_offset=${#line} while [[ "${line:0:$end_offset}" =~ (.*)(\$\{([a-zA-Z_][a-zA-Z_0-9]*)\})(.*) ]] ; do PRE="${BASH_REMATCH[1]}" POST="${BASH_REMATCH[4]}${line:$end_offset:${#line}}" VARNAME="${BASH_REMATCH[3]}" eval 'VARVAL="$'$VARNAME'"' line="$PRE$VARVAL$POST" end_offset=${#PRE} done echo -n "${line:0:-1}" 警告 :我不知道如何在bash中正确处理nuls输入或保留尾随新行的数量。最后一个变量是因为shells__love_二进制输入:
|
2
102
尝试
|
3
35
envsubt对我来说是新的。好极了。 对于记录来说,使用HereDoc是一种很好的模板化conf文件的方法。
|
4
31
我同意使用SED:它是搜索/替换的最佳工具。以下是我的方法:
|
5
17
我认为Eval工作得很好。它处理带有换行符、空白和各种bash内容的模板。当然,如果您完全控制了模板本身:
当然,应该小心使用此方法,因为eval可以执行任意代码。把它作为根目录运行是不可能的。模板中的引号需要转义,否则它们将被
如果您愿意,也可以在这里使用文档
@PlockC提供了一种避免bash引用转义问题的解决方案:
编辑: 删除了有关使用sudo将此作为根目录运行的部分… 编辑: 添加了关于如何转义引号的注释,并将PlockC的解决方案添加到组合中! |
6
16
我有一个类似mogsie的bash解决方案,但是使用HereDoc而不是HereString可以避免转义双引号。
|
7
16
编辑:2017年1月6日我需要在配置文件中保留双引号,以便使用SED对双引号进行双转义有助于:
我不想一直跟在新行后面,但中间的空行是保留的。 虽然这是一个古老的话题,但我在这里找到了更优雅的解决方案: http://pempek.net/articles/2013/07/08/bash-sh-as-template-engine/
所有学分 Grégory Pakosz . |
8
9
接受答案的较长但更可靠的版本:
这将扩展的所有实例
它正确地转义反斜杠,接受反斜杠转义$以抑制替换(与envsubst不同,它的结果是, 不这样做 ) 因此,如果您的环境是:
你的模板是:
结果是:
如果您只想在$之前转义反斜杠(您可以在未更改的模板中写入“c:\windows\system32”),请使用此稍微修改过的版本:
|
9
8
我本来可以这样做的,可能效率较低,但更容易阅读/维护。
|
11
6
而不是重新设计车轮 envsubst 几乎可以用于任何场景,例如从Docker容器中的环境变量构建配置文件。 如果在Mac上,请确保 homebrew 然后从gettext链接它:
/模板
。
/配置文件
现在就用它吧:
|
12
5
使用纯bash从zyx获得答案,但使用新的风格regex匹配和间接参数替换,它变成:
|
13
4
如果使用 珀尔 是一个选项,您满足于将扩展建立在 环境 仅变量 (与所有 壳 变量) 考虑 Stuart P. Bentley's robust answer .
此答案旨在提供
仅bash解决方案
尽管使用了
这个 目标 是:
功能
实例:
如果你在找一个
更严格的解决方案
只有
支架
这里是一个
只改进了bash版本,
改进包括:
|
14
4
下面是另一个纯bash解决方案:
输出
|
15
3
本页描述了 answer with awk
|
16
3
完美的案例 shtpl . (矿山项目,使用不广泛,缺乏文件。但无论如何,这就是它提供的解决方案。希望您能测试一下。) 只需执行:
结果是:
玩得高兴。 |
17
3
另一个解决方案是:生成一个包含模板文件中所有变量和内容的bash脚本,该脚本如下所示:
如果我们将这个脚本输入bash,它将产生所需的输出:
以下是如何生成该脚本并将该脚本馈送到bash中:
讨论
|
18
1
您也可以使用 巴什布尔 (内部使用上述/下文所述的评估方法)。 例如,如何从多个部分生成HTML: https://github.com/mig1984/bashible/tree/master/examples/templates |
19
1
这是纯bash函数,可根据您的喜好进行调整,用于生产,不应中断任何输入。 如果坏了-告诉我。 |
20
0
下面是一个保持空白的bash函数:
|
21
0
这是修改过的
功能(根据我的需要,但应易于修改):
|
TCD · 标准库非类型模板类是否显式实例化? 2 年前 |
sovesti · 参数较少的模板函数中的演绎 2 年前 |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
Seymore Glass · 模板不工作的默认参数 2 年前 |
Alexander Daum · 模板参数中对模板类型的引用 6 年前 |
ledonter · 为什么注入的类名有时不被视为类模板中的模板名? 6 年前 |