linux - लिनक्स बैश: एकाधिक चर असाइनमेंट



bash shell (4)

PHP में निम्न कोड के समान कुछ लिनक्स बैश में मौजूद है:

list($var1, $var2, $var3) = function_that_returns_a_three_element_array() ;

यानी आप एक वाक्य में 3 अलग-अलग चर के अनुरूप मान देते हैं।

आइए मान लें कि मेरे पास बैश फ़ंक्शन myBashFuntion जो "qwert asdfg zxcvb" स्ट्रिंग को लिखने के लिए लिखता है। क्या ऐसा कुछ करना संभव है:

(var1 var2 var3) = ( `myBashFuntion param1 param2` )

बराबर चिह्न के बाईं ओर भाग पाठ्यक्रम का वैध वाक्यविन्यास नहीं है। मैं सिर्फ यह बताने की कोशिश कर रहा हूं कि मैं क्या पूछ रहा हूं।

हालांकि, काम क्या है:

array = ( `myBashFuntion param1 param2` )
echo ${array[0]} ${array[1]} ${array[2]}

लेकिन एक अनुक्रमित सरणी सादा परिवर्तनीय नाम के रूप में वर्णनात्मक नहीं है।
हालांकि, मैं बस कर सकता था:

var1 = ${array[0]} ; var2 = ${array[1]} ; var3 = ${array[2]}

लेकिन वे 3 और बयान हैं जिन्हें मैं टालना पसंद करूंगा।

मैं सिर्फ शॉर्टकट वाक्यविन्यास की तलाश में हूं। क्या यह संभव है?


O'Reilly द्वारा बैश कुकबुक के अध्याय 5, एक चर असाइनमेंट में आवश्यकता के कारणों (कुछ लंबाई में) पर चर्चा करता है कि '=' चिह्न के आसपास कोई स्थान नहीं है

MYVAR="something"

स्पष्टीकरण में कमांड के नाम और एक चर के बीच अंतर करने के साथ कुछ करना है (जहां '=' ​​वैध तर्क हो सकता है)।

यह सब घटना के बाद औचित्य की तरह थोड़ा लगता है, लेकिन किसी भी मामले में चर की सूची को असाइन करने की विधि का कोई उल्लेख नहीं है।


कभी-कभी आपको कुछ मज़ाकिया करना पड़ता है। मान लें कि आप एक कमांड से पढ़ना चाहते हैं (उदाहरण के लिए एसडीजीयूरो द्वारा दिनांक उदाहरण) लेकिन आप एकाधिक कांटे से बचना चाहते हैं।

read month day year << DATE_COMMAND
 $(date "+%m %d %Y")
DATE_COMMAND
echo $month $day $year

आप रीड कमांड में भी पाइप कर सकते हैं, लेकिन फिर आपको सबहेल के भीतर चर का उपयोग करना होगा:

day=n/a; month=n/a; year=n/a
date "+%d %m %Y" | { read day month year ; echo $day $month $year; }
echo $day $month $year

का परिणाम...

13 08 2013
n/a n/a n/a

मुझे लगता है कि यह मदद कर सकता है ...

मेरी स्क्रिप्ट में उपयोगकर्ता इनपुट दिनांक (मिमी / डीडी / yyyy) को तोड़ने के लिए, मैं दिन, महीना, और वर्ष को सरणी में संग्रहीत करता हूं, और उसके बाद मूल्यों को अलग-अलग चरों में निम्नानुसार रखता है:

DATE_ARRAY=(`echo $2 | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)

मैं मानों को एक सरणी में असाइन करना चाहता था। तो, माइकल क्रेलिन के दृष्टिकोण को विस्तारित करते हुए, मैंने किया:

read a[{1..3}] <<< $(echo 2 4 6); echo "${a[1]}|${a[2]}|${a[3]}"

कौन सी पैदावार:

2|4|6 

जैसा सोचा था।





multiple-variable-return