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 $-, $#, $1değ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, forveya başka).
Bir var gövdeler için typesetya declarekadar komutu, rapor olmaz ayarlanmış olan değişkenler beyan fakat atanan hariç zsh.
Dizileri destekleyen kabukları için, dışında yashve 0 dizininin öğesi ayarlanmadıkça, dizi dizisi değişkenleri olarak zshbildirilmeyen raporlar .
İçin bash(ama ksh93ne 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 ksh93ve 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, zshve bashpotansiyel 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, zshve bash4.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.
$somevarbir değer / dizeye değişken yoksa:${somevar:=42}.