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 $-
, $#
, $1
Variablen? (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
, for
oder andere).
Bei Shells mit einem typeset
oder 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 yash
und zsh
, die nur dann als Set- Array-Variablen gemeldet werden, wenn das Element von Index 0 festgelegt wurde.
Für bash
(aber nicht ksh93
noch 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 ksh93
und bash
für Variablen vom Typ nameref wird nur true zurückgegeben, wenn die vom nameref referenzierte Variable selbst als gesetzt betrachtet wird .
Für ksh
, zsh
und bash
ein 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
, zsh
und bash
4.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.
$somevar
auf einen Wert / string , wenn die Variable existiert nicht:${somevar:=42}
.