Use*_*er1 12 bash lazy-evaluation
是否有比以下更优雅的懒惰评估方式:
pattern='$x and $y' x=1 y=2 eval "echo $pattern"
结果:
1 and 2
它有效,但eval "echo ..."只是感觉草率,可能在某种程度上不安全.在Bash中有更好的方法吗?
$ pattern='$x and $y'
$ x=1 y=2 envsubst <<< $pattern
1 and 2
Run Code Online (Sandbox Code Playgroud)
一种安全的可能性是使用功能:
expand_pattern() {
pattern="$x and $y"
}
Run Code Online (Sandbox Code Playgroud)
就这样。然后使用如下:
x=1 y=1
expand_pattern
echo "$pattern"
Run Code Online (Sandbox Code Playgroud)
您甚至可以将x和y用作环境变量(这样就不会在主作用域中设置它们):
x=1 y=1 expand_pattern
echo "$pattern"
Run Code Online (Sandbox Code Playgroud)