Bash中的懒惰评估

Use*_*er1 12 bash lazy-evaluation

是否有比以下更优雅的懒惰评估方式:

pattern='$x and $y'
x=1
y=2
eval "echo $pattern"

结果:

1 and 2

它有效,但eval "echo ..."只是感觉草率,可能在某种程度上不安全.在Bash中有更好的方法吗?

tok*_*and 5

您可以使用命令envsubstgettext的,例如:

$ pattern='$x and $y'
$ x=1 y=2 envsubst <<< $pattern
1 and 2
Run Code Online (Sandbox Code Playgroud)


gni*_*urf 5

一种安全的可能性是使用功能:

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)

您甚至可以将xy用作环境变量(这样就不会在主作用域中设置它们):

x=1 y=1 expand_pattern
echo "$pattern"
Run Code Online (Sandbox Code Playgroud)