bash -cを呼び出すとソースが機能しないのはなぜですか?

bash -cを呼び出すとソースが機能しないのはなぜですか?

特定の環境を処理するためのスクリプトを取得するためにコマンドを実行したいと思います。現在のシェルから変数を取得するのではなく、実行前の変数です。

テスト環境

export test=1

これらのコマンドのどれも環境を反映しません。変える:

a) これはうまくいきませんか?新しいシェルでこのコマンドを実行して出力を再インポートするのではありませんか?

$ bash -c "source test.env && echo $test"

b)ここではtest.envを実行し、execを使用して同じプロセスでecho $ testを実行しようとしています。

$ bash -c "./test.env && exec echo $test"

c) 結局、順列が可能だったのでこれを試しました。ただし、test.envとechoコマンドは別々のプロセスとして実行されます。

$ bash -c "./test.env && echo $test"

環境でどのように機能させることができますか? 2番目のコマンドを実行する前に取得した変数ですか?

ベストアンサー1

$最初のコマンドでドル記号をエスケープする必要があります。それ以外の場合、bashコマンドが実行される前にドル記号が展開されます。

$ bash -c "source test.env && echo \$test"

または、二重引用符の代わりに一重引用符を使用する必要があります。

$ bash -c 'source test.env && echo $test'

おすすめ記事