Portatile per tutte le shell POSIX:
if [ -n "${foobar+1}" ]; then
echo "foobar is defined"
else
echo "foobar is not defined"
fi
Fare che ${foobar:+1}se si vuole trattare foobarallo stesso modo se è vuota o non definita. È inoltre possibile utilizzare ${foobar-}per ottenere una stringa vuota quando foobarnon è definito e il valore di foobaraltrimenti (o inserire qualsiasi altro valore predefinito dopo il -).
In ksh, se foobarviene dichiarato ma non definito, come in typeset -a foobar, quindi si ${foobar+1}espande nella stringa vuota.
Zsh non ha variabili dichiarate ma non impostate: typeset -a foobarcrea un array vuoto.
In bash, le matrici si comportano in modo diverso e sorprendente. ${a+1}si espande solo 1se aè un array non vuoto, ad es
typeset -a a; echo ${a+1} # prints nothing
e=(); echo ${e+1} # prints nothing!
f=(''); echo ${f+1} # prints 1
Lo stesso principio si applica agli array associativi: le variabili array vengono trattate come definite se hanno un insieme di indici non vuoto.
Un modo diverso e specifico per bash di verificare se è stata definita una variabile di qualsiasi tipo è verificare se è elencato in . Questo riporta array vuoti come definiti, diversamente , ma riporta variabili dichiarate ma non assegnate ( ) come indefinite.${!PREFIX*}${foobar+1}unset foobar; typeset -a foobar
case " ${!foobar*} " in
*" foobar "*) echo "foobar is defined";;
*) echo "foobar is not defined";;
esac
Ciò equivale a testare il valore di ritorno di typeset -p foobarodeclare -p foobar , tranne che typeset -p foobarnon riesce su variabili dichiarate ma non assegnate.
In bash, come in ksh, set -o nounset; typeset -a foobar; echo $foobargenera un errore nel tentativo di espandere la variabile non definita foobar. A differenza di ksh, set -o nounset; foobar=(); echo $foobar(o echo "${foobar[@]}") attiva anche un errore.
Si noti che in tutte le situazioni qui descritte, si ${foobar+1}espande nella stringa vuota se e solo se $foobarcauserebbe un errore in set -o nounset.
-vnon è un'opzione pertest, ma un operatore per le espressioni condizionali.