Si noti che se si desidera determinare se una variabile è impostata, probabilmente non si desidera utilizzare if/else o test ([). È più tipico fare cose come:
# Abort if JAVA_HOME is not set (or empty) : ${JAVA_HOME:?JAVA_HOME is unset}
o
# report the value of JAVA_HOME, or a default value echo ${JAVA_HOME:-default value}
o
# 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
Ti stai imbattendo in una stupida limitazione del percorso sh
espande gli argomenti. La riga 3 del tuo script viene espansa in:
if [ != ]
Quale sh
non riesco a capire cosa farne. Prova questo brutto trucco per le dimensioni:
if [ x$JAVA_HOME != x ]
Entrambi gli argomenti devono essere non vuoti, quindi lanceremo semplicemente un x
in entrambi e guarda cosa succede.
In alternativa, c'è un operatore separato per verificare se una stringa non è vuota:
if [ !-z $JAVA_HOME ]
(-z
verifica se la stringa seguente è vuota.)
Il -n
e -z
opzioni sono test che dovrebbero essere usati qui:
if [ -n "$JAVAHOME" ]; then
echo "$JAVAHOME";
else
echo "\$JAVAHOME not set";
fi