我有一个变量,$var_c它包含很多复杂的语法.我宁愿不需要多次重写,因为很容易犯错误.但有时数据会发生变化.
#!/bin/bash
var_a="cat"
var_b="dog"
var_c="<div class=\"pet_a\">$var_a</div><div class=\"pet_b\">$var_b</div>"
echo $var_c
var_a="fish"
var_b="whale"
echo $var_c
Run Code Online (Sandbox Code Playgroud)
这首先应该<div class="pet_a">cat</div><div class="peg_b">dog</div>然后<div class="pet_a">fish</div><div class="peg_b">whale</div>,然而,改变变量后$var_a和$var_b,$var_c不更新.
如何告诉BASH更新此变量,而不必再次完全提供所有语法?
在bash中,在分配中插发生在转让时间.所以,你不能真正做你想要做的变量.相反,您应该使用shell函数.例如:
var_a="cat"
var_b="dog"
var_c () {
echo "<div class=\"pet_a\">$var_a</div><div class=\"pet_b\">$var_b</div>"
}
echo $(var_c)
# <div class="pet_a">cat</div><div class="pet_b">dog</div>
var_a="fish"
var_b="whale"
echo $(var_c)
# <div class="pet_a">fish</div><div class="pet_b">whale</div>
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,您可以var_c直接调用,而不是echo $(var_c),因为该函数已包含echo语句.我故意在示例中使用它来维护当前的语义,并展示如何使用像变量这样的shell函数.