Zależy, co masz na myśli, istnieje .
Czy zmienna została zadeklarowana ale nie przypisano istnieć ?
Czy tablica (lub hash) zmienną, która została przypisana pusta lista istnieje ?
Robi nameref zmienna wskazując na zmienną, która obecnie nie jest przypisany istnieć ?
Czy uważają Państwo $-
, $#
, $1
zmienne? (POSIX nie).
W muszlach podobnych do Bourne'a kanoniczny sposób to:
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
Że pracuje dla zmiennych skalarnych i innych parametrów, aby stwierdzić, czy zmienna została przypisana wartość (pusty lub nie, automatycznie, z otoczenia, assigments, read
, for
lub inne).
Dla powłok, które mają komendę typeset
lub declare
, które nie zgłosiłyby się jako ustawione zmienne, które zostały zadeklarowane, ale nie zostały przypisane, z wyjątkiem zsh
.
Muszli, które obsługują macierze, z wyjątkiem yash
i zsh
że nie będzie Zgłoś jako zestaw zmiennych tablicowych chyba element índice 0 został ustawiony.
Do bash
(ale nie ksh93
nie zsh
), dla zmiennych typu asocjacyjnej , która nie zgłosić je jako zestaw , chyba że ich elementem kluczowym „0” został ustawiony.
For ksh93
i bash
, dla zmiennych typu nameref , zwraca wartość true tylko wtedy, gdy zmienna, do której odwołuje się nameref, jest uważana za ustawioną .
Na ksh
, zsh
i bash
, potencjalnie lepszym rozwiązaniem mogłoby być:
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
Na ksh93
, zsh
i bash
4,4 lub powyżej, istnieje również:
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
Który zgłosi zmienne, które zostały ustawione lub zadeklarowane.
$somevar
na wartość / string jeśli zmienna nie istnieje:${somevar:=42}
.