Tergantung apa yang Anda maksud dengan yang ada .
Apakah variabel yang telah dideklarasikan tetapi tidak ditugaskan ada ?
Apakah variabel array (atau hash) yang telah ditetapkan daftar kosong ada ?
Apakah variabel nameref menunjuk ke variabel yang saat ini tidak ditetapkan ada ?
Apakah Anda menganggap $-, $#, $1variabel? (POSIX tidak).
Dalam cangkang mirip Bourne, cara kanonik adalah:
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
Itu berfungsi untuk variabel skalar dan parameter lain untuk mengetahui apakah suatu variabel telah diberi nilai (kosong atau tidak, secara otomatis, dari lingkungan, tugas read, foratau lainnya).
Untuk shell yang memiliki perintah typesetatau declare, yang tidak akan melaporkan set variabel yang telah dideklarasikan tetapi tidak ditugaskan kecuali di zsh.
Untuk shell yang mendukung array, kecuali yashdan zshyang tidak akan dilaporkan sebagai variabel array set kecuali elemen indice 0 telah ditetapkan.
Untuk bash(tetapi tidak ksh93juga zsh), untuk variabel array asosiatif tipe , itu tidak akan melaporkannya sebagai set kecuali elemen mereka dari kunci "0" telah ditetapkan.
Untuk ksh93dan bash, untuk variabel tipe nameref , itu hanya mengembalikan true jika variabel yang direferensikan oleh nameref itu sendiri dianggap ditetapkan .
Untuk ksh, zshdan bash, pendekatan yang berpotensi lebih baik adalah:
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
Untuk ksh93, zshdan bash4.4 atau lebih, ada juga:
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
Yang akan melaporkan variabel yang telah ditetapkan atau dideklarasikan.
$somevarke nilai / string jika variabel tidak ada:${somevar:=42}.