Dipende da cosa vuoi dire esiste .
Ha una variabile che è stato dichiarato, ma non assegnato esiste ?
Does una variabile di matrice (o hash) che è stata assegnata una lista vuota esistono ?
Ha una variabile nameref che punta a una variabile che attualmente non è assegnato esiste ?
Lei ritiene $-
, $#
, $1
variabili? (POSIX no).
Nelle conchiglie tipo Bourne, il modo canonico è:
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
Che lavora per variabili scalari e altri parametri per sapere se una variabile è stato assegnato un valore (vuoto o meno, automaticamente, dall'ambiente, assigments, read
, for
o altro).
Per le shell che hanno un comando typeset
o declare
, che non riporta come impostato le variabili che sono state dichiarate ma non assegnate se non in zsh
.
Per le shell che supportano le matrici, ad eccezione di yash
e zsh
che non riportano come variabili array impostate a meno che non sia stato impostato l'elemento di indice 0.
Per bash
(ma non ksh93
ne zsh
), per le variabili di tipo array associativo , che sarebbe senza segnalarli come insieme a meno che il loro elemento di tasto "0" è stato impostato.
Per ksh93
e bash
, per le variabili di tipo nameref , ciò restituisce true solo se la variabile a cui fa riferimento nameref viene considerata impostata .
Per ksh
, zsh
e bash
, un approccio potenzialmente migliore potrebbe essere:
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
Per ksh93
, zsh
e bash
4.4 o superiore, c'è anche:
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
Che riporterà le variabili che sono state impostate o dichiarate.
$somevar
un valore / stringa se variabile non esiste:${somevar:=42}
.