私は環境変数が設定されているかどうかを確認する必要があるシェルスクリプトを作成しています。環境変数がすでに設定されているかどうかにかかわらず、シェルスクリプトをチェックする方法はありますか?環境変数が既に設定されているかどうかを確認してください。
答えて
[ -z "$VARIABLE" ] && VARIABLE="abc"
if env | grep -q ^VARIABLE=
then
echo env variable is already exported
else
echo env variable was not exported, but now it is
export VARIABLE
fi
私はあなたがVARIABLE
を持つことができますが、それが輸出されていなかったので[ -z $VARIABLE ]
が、十分ではないことを強調したいです。つまり、環境変数ではありません。
これはすべてのシェル環境で動作しますか? – Mojoy
@Senthilnathan:もちろん、このpeacofコードを移植性の高いものにするために書き換えられる唯一のものは 'grep -q'です。 'env |代わりにgrep^VARIABLE =>/dev/null'を実行してください。 –
変数をエクスポートしてエクスポートせずに変数を設定すると、エクスポートされていない変数とエクスポートされた変数の不一致に終わるのですか、エクスポートされた変数も自動的に更新されますか? – ArtOfWarfare
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
これは、$ VARIABLEの長さがゼロであるかどうかをチェックします。
何がやりたいことはbashのではネイティブで、それが呼ばれるパラメータ置換:変数が設定されていない場合は
VARIABLE="${VARIABLE:=abc}"
は、右手側はABCと同じになります。内部演算子:=は次のものに置き換えることができます。 - 変数が設定されていないか空でないかどうかをテストします。
まさに私が探していたものです。 'export TEST_DATABASE_NAME =" $ {TEST_DATABASE_NAME:= prodlike} "行は、TEST_DATABASE_NAMEがまだ定義されていない場合にのみ、prodlikeをデフォルトとして使用します。厄介な条件ブロックはありません。 1行のコードですべて。 –
、条件(環境中か否か)変数を割り当てるための標準的な溶液である:それは未設定である場合にのみ値「FOO」にVARをセットする
: ${VAR=foo}
。
: ${VAR:=foo}
は、環境の中でVARを入れてフォローアップする:
export VAR
あなたはまた、行うことができますexport VAR=${VAR-foo}
VARが未設定または空の文字列、使用された場合
は、VARに "foo" を設定するにはまたはexport VAR=${VAR:=foo}
ですが、一部の古いシェルでは、同じ行に代入と書き出しの構文がサポートされていません。また、DRY; =
オペレータの両側の名前を使用することは不要な繰り返しです。 (変数をエクスポートする2行目は、同じプリンシパルに違反しますが、より良い感じです)。
変数が環境内にあるかどうかを判断することは一般的には非常に困難です。 env
の出力を解析することはできません。考えてみましょう:
export foo='
VAR=var-value'
env | grep VAR
また、それはサブシェルとテストを起動するために動作します:
sh -c 'echo $VAR'
VARはVARは、環境にあることの指標となりサブシェルに設定されることを示すであろうと現在のプロセスですが、単にサブシェルの初期化でVARが設定されている可能性があります。しかし、機能的には、VARが環境にある場合と同じ結果になります。幸いにも、VARが環境にあるかどうかは、通常は気にしません。あなたがそこにそれを必要とするなら、そこに置く。それが必要な場合は、取り出してください。
':$ {VAR:= foo}'表記が内部的にどのように動作するかについての説明を追加できますか?私はいつもそれを解決策と見なしますが、実際にはそれが実際には機能しません。 –
私は[StackOverflow](http://stackoverflow.com/questions/4437573/bash-assign-default-value)に関するいくつかの説明を見つけました! –
- 1. python-redfish:$ HOME環境変数が設定されていません。システムを確認してください
- 2. 環境変数をtmuxステータスに設定してください
- 3. GCPの環境変数を設定してください
- 4. 環境変数に応じてuWSGI設定を設定してください
- 5. ArgParseオプションの引数が設定されているかどうかを確認してください(ジュリアで)
- 6. Java:特定のビットがlongに設定されているかどうかを確認してください
- 7. 変数のいずれかがNoneに設定されていることを確認してください。
- 8. OAuth 2.0が既に承認されているかどうかを確認してください
- 9. 実行環境内で変数のセットが定義されているかどうかを確認してください。
- 10. ngビルドの環境変数からベースhrefを設定してください
- 11. Liquibase:プロパティが設定されているか確認してください
- 12. Javascript - メールが設定されているか確認してください
- 13. Django userena mugshotが設定されているか確認してください
- 14. DLLが既に登録されているか確認してください。
- 15. initdb.bin:ロケール設定が無効です。 LANGとLC_ *環境変数を確認してください
- 16. MemberBindingの式が設定されているかどうかを確認してください。
- 17. コンテンツが既にPHPで送信されているかどうかを確認してください
- 18. ファイルがアップロードされているかどうか確認してください。
- 19. ブロードキャストレシーバが既に登録されているかどうか確認してください。
- 20. アプリケーションが既に実行されているかどうか確認してください
- 21. cmdで環境変数を設定してください。ヘルプが必要
- 22. Sympy式が定数に単純化されているかどうか確認してください
- 23. $ _SESSION変数がJavascriptから設定されていることを確認してください
- 24. sedコマンドが変更されたかどうか確認してください。
- 25. 変数が複数のスクリプトに設定されていることを確認してください
- 26. PHPで環境変数が設定されているかどうかを確認するにはどうすればよいですか?
- 27. 変数が 'http'で始まるかどうか確認してください
- 28. Java、PATH環境に実行ファイルが存在するかどうか確認してください
- 29. ステータスバーが隠れているかどうかを確認してください
- 30. Silex - 既にデータベースに登録されているかどうか確認してください
実際には、これはその質問の真の複製ではありません。ここでのOPは、スクリプトを終了する代わりに、変数が設定されているかどうかを知りたい場合、その場合、$ {V :?}は有効な答えではありません。 'set | grep -q '^ V =' 'はです。これは変数の存在をテストし、変数が設定されていても空文字列になっていても機能します。 – Coroos