Phụ thuộc vào những gì bạn có nghĩa là tồn tại .
Có một biến đã được khai báo nhưng không được chỉ định tồn tại ?
Có một biến mảng (hoặc băm) đã được chỉ định một danh sách trống tồn tại không?
Có một biến nameref trỏ đến một biến hiện không được chỉ định tồn tại ?
Bạn có xem xét $-
, $#
, $1
biến? (POSIX không).
Trong các vỏ giống như Bourne, cách chính tắc là:
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
Điều đó làm việc cho các biến vô hướng và các thông số khác cho biết nếu một biến đã được gán một giá trị (trống hay không, tự động, từ môi trường, assigments, read
, for
hoặc khác).
Đối với các shell có a typeset
hoặc declare
lệnh, điều đó sẽ không báo cáo như đặt các biến đã được khai báo nhưng không được chỉ định ngoại trừ trong zsh
.
Đối với các shell hỗ trợ các mảng, ngoại trừ yash
và zsh
sẽ không báo cáo là các biến mảng được đặt trừ khi phần tử của chỉ số 0 đã được đặt.
Đối với bash
(nhưng không phải ksh93
cũng không zsh
), đối với các biến của mảng kết hợp kiểu , điều đó sẽ không báo cáo chúng là tập hợp trừ khi phần tử khóa "0" của chúng đã được đặt.
Đối với ksh93
và bash
, đối với các biến có kiểu nameref , điều đó chỉ trả về true nếu biến được tham chiếu bởi nameref được coi là tập hợp .
Đối với ksh
, zsh
và bash
, một cách tiếp cận tiềm năng tốt hơn có thể là:
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
Đối với ksh93
, zsh
và bash
4.4 trở lên, cũng có:
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
Mà sẽ báo cáo các biến đã được thiết lập hoặc khai báo.
$somevar
giá trị / chuỗi nếu biến không tồn tại :${somevar:=42}
.