47

環境変数が設定されているかどうかを確認する必要があるシェルスクリプトを作成しています。設定されていない場合は、設定する必要があります。環境変数が既に設定されているかどうかに関係なく、シェルスクリプトをチェックインする方法はありますか?

4

4 に答える 4

72

条件付きで変数を割り当てる標準的な解決策 (環境内にあるかどうかにかかわらず) は次のとおりです。

: ${VAR=foo}

設定されていない場合にのみ、VAR が値「foo」に設定されます。
VAR が設定されていないか空の文字列の場合に VAR を「foo」に設定するには、次を使用します。

: ${VAR:=foo}

VAR を環境に配置するには、次のようにフォローアップします。

export VAR

export 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 が環境内にあるかどうかは気にしません。そこに必要な場合は、そこに置いてください。必要な場合は、取り出してください。

于 2012-07-27T11:31:51.043 に答える
34
[ -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

持っていることはできますが、エクスポートされていない[ -z $VARIABLE ]ため、それだけでは不十分であることを強調したいと思います。VARIABLEつまり、環境変数ではありません。

于 2012-07-27T10:48:46.363 に答える
31

あなたがしたいことはbashでネイティブであり、それはパラメーター置換と呼ばれます:

VARIABLE="${VARIABLE:=abc}"

VARIABLEが設定されていない場合、右側はabcに等しくなります。内部演算子は、VARIABLEが設定されていないか空であるかどうかをテスト:=するものに置き換えられる場合があることに注意してください。:-

于 2012-07-27T11:23:18.420 に答える
10
if [ -z "$VARIABLE" ]; then
    VARIABLE=...
fi

これは、$VARIABLE の長さがゼロかどうかをチェックします。

于 2012-07-27T10:42:35.457 に答える