abc=okवैरिएबल को एक मान प्रदान करता है abc। declare abcएक चर घोषित करता है abc। दोनों को एक साथ जोड़ा जा सकता है declare abc=ok।
बैश में, अन्य गोले की तरह, स्ट्रिंग और एरे चर को घोषित करने की आवश्यकता नहीं होती है, इसलिए declareयह आवश्यक नहीं है जब तक कि आप विकल्प पारित नहीं करना चाहते हैं, उदाहरण declare -A abcके लिए abcएक साहचर्य सरणी declare -rबनाने के लिए या केवल एक चर पढ़ने के लिए। हालाँकि, किसी फ़ंक्शन के अंदर, declareइससे फर्क पड़ता है: यह वेरिएबल को फ़ंक्शन के लिए स्थानीय बनाता है, जिसका अर्थ है कि फ़ंक्शन के बाहर वेरिएबल का मान (यदि कोई हो) संरक्षित है। (जब तक आप उपयोग नहीं करते हैं declare -g, जो चर को स्थानीय नहीं बनाता है; यह तब उपयोगी होता है जब अन्य विकल्पों के साथ संयुक्त होता है, उदाहरण के declare -gAलिए किसी फ़ंक्शन में वैश्विक साहचर्य सरणी बनाने के लिए।) उदाहरण:
f () {
declare a
a='a in f'
b='b in f'
echo "From f: a is $a"
echo "From f: b is $b"
}
a='Initial a'
b='Initial b'
f
echo "After f: a is $a"
echo "After f: b is $b"
आउटपुट:
From f: a is a in f
From f: b is b in f
After f: a is Initial a
After f: b is b in f
declareबिलिन के साथ एक और चीज आप कर सकते हैं
declareBuiltin बैश के लिए अद्वितीय है। यह दृढ़ता से प्रेरित है और ksh के बिल्डिन के बहुत करीब है typeset, और बैश संगतता के typesetपर्याय के रूप में प्रदान करता है declare। (मुझे नहीं पता कि क्यों बैश ने इसे कॉल नहीं किया typeset)। एक तीसरा पर्यायवाची है local,। वहाँ भी है export, जो एक ही है declare -x, फिर से संगतता के लिए (हर बॉर्न-शैली शेल के साथ)।
declare,localकमांड के साथ NAME को स्थानीय बनाता है ।-gविकल्प इस व्यवहार को रोकता है। देख लोhelp declare।