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 $-
, $#
, $1
variabel? (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
, for
atau lainnya).
Untuk shell yang memiliki perintah typeset
atau declare
, yang tidak akan melaporkan set variabel yang telah dideklarasikan tetapi tidak ditugaskan kecuali di zsh
.
Untuk shell yang mendukung array, kecuali yash
dan zsh
yang tidak akan dilaporkan sebagai variabel array set kecuali elemen indice 0 telah ditetapkan.
Untuk bash
(tetapi tidak ksh93
juga zsh
), untuk variabel array asosiatif tipe , itu tidak akan melaporkannya sebagai set kecuali elemen mereka dari kunci "0" telah ditetapkan.
Untuk ksh93
dan bash
, untuk variabel tipe nameref , itu hanya mengembalikan true jika variabel yang direferensikan oleh nameref itu sendiri dianggap ditetapkan .
Untuk ksh
, zsh
dan 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
, zsh
dan bash
4.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.
$somevar
ke nilai / string jika variabel tidak ada:${somevar:=42}
.