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 $-, $#, $1variabili? (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, foro altro).
Per le shell che hanno un comando typeseto 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 yashe zshche non riportano come variabili array impostate a meno che non sia stato impostato l'elemento di indice 0.
Per bash(ma non ksh93ne 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 ksh93e bash, per le variabili di tipo nameref , ciò restituisce true solo se la variabile a cui fa riferimento nameref viene considerata impostata .
Per ksh, zshe 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, zshe bash4.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.
$somevarun valore / stringa se variabile non esiste:${somevar:=42}.