変数を含むファイルの内容をエコーするのに役立ちます

変数を含むファイルの内容をエコーするのに役立ちます

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

関連情報