Derken ne demek istediğine bağlı bulunmaktadır .
Beyan edilmiş fakat atanmamış bir değişken var mı?
Boş bir liste atanmış bir dizi (ya da karma) değişkeni var mı?
Şu anda atanmamış bir değişkeni işaret eden bir aderef değişkeni var mı?
Dikkate musunuz $-
, $#
, $1
değişkenler? (POSIX yapmaz).
Bourne benzeri mermilerde kanonik yol şudur:
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
Yani (atamaları, otomatik, boş ya da değil, çevreden değişken bir değeri atanmıştır anlamanın skaler değişkenler ve diğer parametreler için çalışır read
, for
veya başka).
Bir var gövdeler için typeset
ya declare
kadar komutu, rapor olmaz ayarlanmış olan değişkenler beyan fakat atanan hariç zsh
.
Dizileri destekleyen kabukları için, dışında yash
ve 0 dizininin öğesi ayarlanmadıkça, dizi dizisi değişkenleri olarak zsh
bildirilmeyen raporlar .
İçin bash
(ama ksh93
ne de değil zsh
), ilişkisel dizi türündeki değişkenler için , "0" anahtar öğeleri belirlenmemişse , bunları ayarlanmış olarak bildirmez .
İçin ksh93
ve bash
, tipi değişkenler için nameref , o tek gerçek döndüren nameref tarafından başvurulan değişken kendisi kabul ise set .
İçin ksh
, zsh
ve bash
potansiyel olarak daha iyi bir yaklaşım olabilir:
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
İçin ksh93
, zsh
ve bash
4.4 veya üzeri, orada da:
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
Belirlenmiş veya bildirilmiş değişkenleri bildirecektir.
$somevar
bir değer / dizeye değişken yoksa:${somevar:=42}
.