環境変数を使用した Bash コマンドの置換

環境変数を使用した Bash コマンドの置換

bashにこのコードがあります

#!/usr/bin/env bash

DB_NAME=$(CORE_CONFIG=core.config.core_test python -c "from core import config; print config.DATABASE['db_name']")

私が本当に欲しいものは:

#!/usr/bin/env bash

ENV_VARIABLE="CORE_CONFIG=core.config.core_test"

DB_NAME=$($ENV_VARIABLE python -c "from core import config; print config.DATABASE['db_name']")

しかし、bashはCORE_CONFIGがコマンドではないと文句を言います。

私はすべてをバックティックして、さまざまな構成でネストしようとしたと思います。効果がないか、「コマンドが見つかりません」。

正しいことは何ですか?

ベストアンサー1

=代入はリテラルで、引用符がない場合は、最初の引数の前の単語でのみ認識され、=左側の部分が有効な変数名を形成する場合にのみ認識されます。

場合によっては、単語がコマンド引数として扱われるか、単語の分割やグロービングによってより多くのコマンドが生成される場合は、複数のコマンド引数として処理されます(最初の引数は、実行するコマンドを派生させるために使用されます)。

ここでは、次のことができます。

DB_NAME=$(
  export "$ENV_VARIABLE"
  python...
)

ここで変数の内容は引数として渡され、export環境export変数の代入として扱われます。

$(...)変数がpythonコマンドでのみエクスポートされるように、サブシェル環境が作成されます。

おすすめ記事