निर्भर करता है कि आप क्या मतलब है मौजूद है ।
क्या एक वैरिएबल घोषित किया गया है, लेकिन मौजूद नहीं है ?
क्या कोई सरणी (या हैश) चर जिसे खाली सूची दी गई है, मौजूद है ?
क्या कोई ऐसा वेरिएबल वैरिएबल है जो किसी वैरिएबल की ओर इशारा करता है जो वर्तमान में असाइन नहीं है ?
आप मानते हैं $-
, $#
, $1
चर? (POSIX नहीं है)।
बॉर्न जैसे गोले में, विहित तरीका है:
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
स्केलर चर और अन्य मापदंडों के लिए काम करता है यह बताने के लिए कि क्या चर को एक मान (खाली या नहीं, स्वचालित रूप से, पर्यावरण, assigments read
, for
या अन्य) से सौंपा गया है ।
ऐसे शेल के लिए जिनके पास एक कमांड typeset
या declare
कमांड है, जो उन वेरिएबल्स को सेट नहीं करेगा जो घोषित किए गए हैं, लेकिन इसके अलावा असाइन नहीं किए गए हैं zsh
।
जब तक कि ऐरे का समर्थन करने वाले गोले, इसके लिए yash
और सेट सरणी चर के zsh
रूप में रिपोर्ट नहीं करेंगे, जब तक कि इंडिस 0 का तत्व सेट नहीं किया गया हो।
के लिए bash
(लेकिन नहीं ksh93
है और न ही zsh
), प्रकार के चर के लिए साहचर्य सरणी , कि उन्हें के रूप में रिपोर्ट नहीं होगा सेट की कुंजी "0" स्थापित किया गया है उनके तत्व जब तक।
के लिए ksh93
और bash
, प्रकार के चर के लिए nameref , कि केवल सच लौटाता है यदि चर nameref द्वारा संदर्भित ही माना जाता है सेट ।
के लिए ksh
, zsh
और bash
, संभावित रूप से बेहतर दृष्टिकोण हो सकता है:
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
के लिए ksh93
, zsh
और bash
4.4 या इसके बाद के संस्करण, वहाँ भी है:
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
जो उन चरों की रिपोर्ट करेगा जो निर्धारित या घोषित किए गए हैं।
$somevar
, तो चर मौजूद नहीं है एक मूल्य / स्ट्रिंग के लिए:${somevar:=42}
।