帮助回显包含变量的文件的内容

帮助回显包含变量的文件的内容

foo我有包含的文件foo ${bar}和 bash 脚本bar

bar="foo"
file=$(cat foo)
echo "$file"

从而产生foo ${bar}.不过我希望它能够产生foo foo.

我将如何实现这个目标?

答案1

如果您不介意将变量导出到您的环境中,那么您可以使用envsubst

NAME
       envsubst - substitutes environment variables in shell format strings

SYNOPSIS
       envsubst [OPTION] [SHELL-FORMAT]

DESCRIPTION
       Substitutes the values of environment variables.

前任。给定

$ cat foo
foo ${bar}

然后

$ export bar="foo"
$ envsubst < foo
foo foo

答案2

如果可以将文件集成到脚本中(或向文件添加一些代码),那么可以使用此处的文档来完成:

foo=bar

cat <<EOT
abc
_${foo}_
def
EOT
    abc
    _bar_
    def

可以使用纯文件完成类似的操作:

export foo=bar

commands="cat <<EOT
$(<input)
EOT"

bash -c "$commands"

答案3

您可以使用以下方法来实现eval

$ cat foo
foo ${bar}

$ cat bar
bar="foo"
file="$(cat foo)"
eval echo "${file}"

$ bash bar
foo foo

请记住,这eval很容易被滥用。请阅读Eval 命令和安全问题

相关内容