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 命令和安全问题。