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コマンドでのみエクスポートされるように、サブシェル環境が作成されます。