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
बिलिन के साथ एक और चीज आप कर सकते हैं
declare
Builtin बैश के लिए अद्वितीय है। यह दृढ़ता से प्रेरित है और ksh के बिल्डिन के बहुत करीब है typeset
, और बैश संगतता के typeset
पर्याय के रूप में प्रदान करता है declare
। (मुझे नहीं पता कि क्यों बैश ने इसे कॉल नहीं किया typeset
)। एक तीसरा पर्यायवाची है local
,। वहाँ भी है export
, जो एक ही है declare -x
, फिर से संगतता के लिए (हर बॉर्न-शैली शेल के साथ)।
declare
,local
कमांड के साथ NAME को स्थानीय बनाता है ।-g
विकल्प इस व्यवहार को रोकता है। देख लोhelp declare
।