変数が設定されているかどうかを判断したい場合は、おそらく if/else またはテスト ([) を使用したくないことに注意してください。次のようなことを行うのがより一般的です:
# Abort if JAVA_HOME is not set (or empty) : ${JAVA_HOME:?JAVA_HOME is unset}
または
# report the value of JAVA_HOME, or a default value echo ${JAVA_HOME:-default value}
または
# Assign JAVA_HOME if it is unset (or empty) : ${JAVAHOME:=default value}
if [ -z $JAVA_HOME ]
then
echo $JAVA_HOME
else
echo "NO JAVA HOME SET"
fi
あなたは方法 sh
の愚かな制限に遭遇しています 引数を展開します。スクリプトの 3 行目は次のように展開されています:
if [ != ]
どの sh
何をすべきかわかりません。この厄介なサイズのハックを試してください:
if [ x$JAVA_HOME != x ]
両方の引数は空でない必要があるため、x
をスローします。 両方に入って、何が起こるか見てください。
または、文字列が空でないかどうかをテストする別の演算子があります:
if [ !-z $JAVA_HOME ]
(-z
次の文字列が空かどうかをテストします。)
-n
および -z
オプションは、ここで使用する必要があるテストです:
if [ -n "$JAVAHOME" ]; then
echo "$JAVAHOME";
else
echo "\$JAVAHOME not set";
fi