Hängt davon , was Sie mit existiert .
Hat eine Variable, die deklariert wurde , aber nicht zugewiesen existieren ?
Enthält ein Array (oder hash) Variable, die eine leere Liste zugeordnet wurde , existieren ?
Gibt es eine nameref Variable zeigt auf eine Variable, die derzeit nicht zugeordnet existieren ?
Sind Sie der Meinung $-, $#, $1Variablen? (POSIX nicht).
In Bourne-ähnlichen Muscheln lautet der kanonische Weg:
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
Das funktioniert für skalare Variablen und andere Parameter zu sagen , ob eine Variable einen Wert zugewiesen wurde (leer oder nicht, automatisch aus der Umgebung, assigments, read, foroder andere).
Bei Shells mit einem typesetoder declare-Befehl werden die deklarierten, aber nicht zugewiesenen Variablen mit Ausnahme von in nicht als gesetzt gemeldet .zsh
Für Shells, die Arrays unterstützen, mit Ausnahme von yashund zsh, die nur dann als Set- Array-Variablen gemeldet werden, wenn das Element von Index 0 festgelegt wurde.
Für bash(aber nicht ksh93noch zsh), für Variablen vom Typ assoziatives Array , die sie nicht als gesetzt melden würden, es sei denn, ihr Element des Schlüssels "0" wurde gesetzt.
Für ksh93und bashfür Variablen vom Typ nameref wird nur true zurückgegeben, wenn die vom nameref referenzierte Variable selbst als gesetzt betrachtet wird .
Für ksh, zshund bashein potenziell besseren Ansatz könnte sein:
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
Für ksh93, zshund bash4.4 oder höher, gibt es auch:
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
Welche Variablen melden, die gesetzt oder deklariert wurden.
$somevarauf einen Wert / string , wenn die Variable existiert nicht:${somevar:=42}.