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
悪用されやすいので注意してください。読んでください評価コマンドとセキュリティの問題。