मैं यूनिक्स शैल स्क्रिप्टिंग में सरणी कैसे बना सकता हूं?Arrays?
Arrays?
उत्तर
आप निम्न प्रकार की कोशिश कर सकते हैं:
#!/bin/bash
declare -a arr
i=0
j=0
for dir in $(find /home/rmajeti/programs -type d)
do
arr[i]=$dir
i=$((i+1))
done
while [ $j -lt $i ]
do
echo ${arr[$j]}
j=$((j+1))
done
रिक्त स्थान के साथ निर्देशिका नामों पर टूटता है। आईएफएस को बदलने के लिए थोड़ी देर के पढ़ने के लूप का उपयोग करें। – ghostdog74
#!/bin/bash
# define a array, space to separate every item
foo=(foo1 foo2)
# access
echo ${foo[1]}
# add or changes
foo[0]=bar
foo[2]=cat
foo[1000]=also_OK
आप एबीएस "उन्नत बैश-पटकथा गाइड"
पढ़ सकते हैं, तो आप इस
arr=(one two three)
तरह सारिणी निर्मित
तत्वों को कॉल करने के लिए
$ echo ${arr[0]}
one
$ echo ${arr[2]}
three
उपयोगकर्ता इनपुट के लिए पूछने के लिए है, तो आप उपयोग कर सकते हैं पढ़
read -p "Enter your choice: " choice
है कि क्या आप के लिए पूछ रहे हैं।?
बोर्न शैल और सी खोल में सरणी नहीं हैं, आईआईआरसी।
इसके अलावा क्या अन्य लोगों ने कहा है, बैश में आप इस प्रकार एक सरणी में तत्वों की संख्या प्राप्त कर सकते हैं:
elements=${#arrayname[@]}
और काट शैली संचालन करते हैं:
arrayname=(apple banana cherry)
echo ${arrayname[@]:1} # yields "banana cherry"
echo ${arrayname[@]: -1} # yields "cherry"
echo ${arrayname[${#arrayname[@]}-1]} # yields "cherry"
echo ${arrayname[@]:0:2} # yields "apple banana"
echo ${arrayname[@]:1:1} # yields "banana"
सीएसएच में सरणी हैं। –
@ किथ थॉम्पसन: यह [मैन पेज] (http://linux.die.net/man/1/csh) में प्रलेखित नहीं है लेकिन कार्यक्षमता कम से कम कुछ संस्करणों में मौजूद प्रतीत होती है। –
मैन पेज उस नाम से "सरणी" का उल्लेख नहीं करता है, लेकिन 'set' कमांड' ('name name = (wordlist) ') के दस्तावेज़ और" परिवर्तनीय प्रतिस्थापन "अनुभाग (' $ name [selector] ' और '$ {नाम [चयनकर्ता]}')। जहां तक मुझे पता है, सीएसएच ने हमेशा सरणी का समर्थन किया है। उदाहरण के लिए, '$ पथ' सरणी चर, देखें, जो' $ पाथ 'पर्यावरण परिवर्तक को प्रतिबिंबित करता है। –
ksh में आप यह कर:
set -A array element1 element2 elementn
# view the first element
echo ${array[0]}
# Amount elements (You have to substitute 1)
echo ${#array[*]}
# show last element
echo ${array[ $((${#array[*]} - 1)) ]}
अंतिम तत्व दिखाने के लिए एक और संक्षिप्त तरीका 'echo "$ {array [@]: (- 1)}" 'है। यह सरणी चर नाम को दो बार लिखने की आवश्यकता को समाप्त करता है। –
इस प्रयास करें:
+०१२३५१६४१०६echo "Find the Largest Number and Smallest Number of a given number"
echo "---------------------------------------------------------------------------------"
echo "Enter the number"
read n
while [ $n -gt 0 ] #For Seperating digits and Stored into array "x"
do
x[$i]=`expr $n % 10`
n=`expr $n/10`
done
echo "Array values ${x[@]}" # For displaying array elements
len=${#x[*]} # it returns the array length
for ((i=0; i<len; i++)) # For Sorting array elements using Bubble sort
do
for ((j=i+1; j<len; j++))
do
if [ `echo "${x[$i]} > ${x[$j]}"|bc` ]
then
t=${x[$i]}
t=${x[$i]}
x[$i]=${x[$j]}
x[$j]=$t
fi
done
done
echo "Array values ${x[*]}" # Displaying of Sorted Array
for ((i=len-1; i>=0; i--)) # Form largest number
do
a=`echo $a \* 10 + ${x[$i]}|bc`
done
echo "Largest Number is : $a"
l=$a #Largest number
s=0
while [ $a -gt 0 ] # Reversing of number, We get Smallest number
do
r=`expr $a % 10`
s=`echo "$s * 10 + $r"|bc`
a=`expr $a/10`
done
echo "Smallest Number is : $s" #Smallest Number
echo "Difference between Largest number and Smallest number"
echo "=========================================="
Diff=`expr $l - $s`
echo "Result is : $Diff"
echo "If you try it, We can get it"
बोर्न शैल सरणी का समर्थन नहीं करता है। हालांकि, इस मुद्दे को संभालने के दो तरीके हैं।
उपयोग स्थितीय खोल पैरामीटर $ 1, $ 2, आदि .:
$ set one two three
$ echo $*
one two three
$ echo $#
3
$ echo $2
two
उपयोग चर मूल्यांकन:
$ n=1 ; eval a$n="one"
$ n=2 ; eval a$n="two"
$ n=3 ; eval a$n="three"
$ n=2
$ eval echo \$a$n
two
बैश सरणी का समर्थन करता है। मूल बोर्न शेल के बारे में निश्चित नहीं है, लेकिन इन दिनों बैश अधिक प्रचलित है ... – plesiv
@zplesivcak - ... जीएनयू/लिनक्स पर, क्योंकि यह एक जीएनयू चीज है। उदाहरण के लिए, * फ्रीबीएसडी * 'बैश 'के साथ नहीं भेजता है (हालांकि यह बंदरगाहों से स्थापित है)। 'बैश' सुविधाओं को मानने वाली लिपियों को पोर्टेबल नहीं माना जाता है, और वे बोर्न शेल कार्यान्वयन (जैसे 'डैश', जो * जीएनयू/लिनक्स वितरण पर * आम है) की तुलना में धीमे धीमे हैं। 'bash' एक अच्छा इंटरैक्टिव खोल है, लेकिन यह स्क्रिप्टिंग के लिए धीमा है। – tjameson
'$ *' को हानिकारक माना जाता है। आम तौर पर, '$ @' को प्राथमिकता दी जाती है क्योंकि यह वही करता है, लेकिन रिक्त स्थान रखता है। '$ @' को "$ 1" "$ 2" "$ 3" ... "$ n" के रूप में विस्तारित किया गया है, जबकि '$ *' को "$ 1x $ 2x $ 3x ... $ n" के रूप में विस्तारित किया गया है, जहां 'x' '$ IFS' विभाजक है (सबसे अधिक संभावना है, अंतरिक्ष)। – zserge
keybord से मूल्यों को पढ़ सकते हैं और सरणी में तत्व सम्मिलित करने के लिए
# enter 0 when exit the insert element
echo "Enter the numbers"
read n
while [ $n -ne 0 ]
do
x[$i]=`expr $n`
read n
let i++
done
#display the all array elements
echo "Array values ${x[@]}"
echo "Array values ${x[*]}"
# To find the array length
length=${#x[*]}
echo $length
निम्न कोड शैल में तारों की एक सरणी बनाता है और प्रिंट करता है:
#!/bin/bash
array=("A" "B" "ElementC" "ElementE")
for element in ${array[@]}
do
echo $element
done
echo ""
echo "Nbr of elements:" ${#array[@]}
echo ""
echo ${array[@]}
परिणाम:
declare -A programCollection
programCollection["xwininfo"]="to aquire information about the target window."
for program in ${!programCollection[@]}
do
echo "The program ${program} is used ${programCollection[${program}]}"
done
http://linux.die.net/man/1/bash "साहचर्य arrays -एक का नाम घोषित किए गए हैं:
A
B
ElementC
ElementE
Nbr of elements: 4
A B ElementC ElementE
क्या आप वाकई '#!/Bin/sh' shebang के साथ काम करते हैं? मुझे लगता है कि इसका उपयोग करने के लिए आपको '#!/Bin/bash' का उपयोग करने की आवश्यकता है। – timurb
धन्यवाद Erthad। दरअसल, मैंने इसे #!/Bin/bash में बदल दिया। –
आप रिक्त स्थान के लिए समर्थन के साथ एक महत्वपूर्ण मूल्य की दुकान चाहते हैं -A
पैरामीटर का उपयोग करें। "
एक सरणी को दो बार लोड किया जा सकता है।
set -A TEST_ARRAY alpha beta gamma
या
X=0 # Initialize counter to zero.
- तार अल्फा, बीटा, गामा और
for ELEMENT in alpha gamma beta
do
TEST_ARRAY[$X]=$ELEMENT
((X = X + 1))
done
इसके अलावा के साथ सरणी लोड करें, मुझे लगता है कि नीचे दी गई जानकारी में मदद कर सकते हैं:
खोल एक-आयामी सरणी का समर्थन करता है। सरणी तत्वों की अधिकतम संख्या 1,024 है। जब एक सरणी परिभाषित की जाती है, तो यह स्वचालित रूप से 1,024 तत्वों तक आयाम होता है। एक-आयामी सरणी में सरणी तत्वों का अनुक्रम होता है, जो एक ट्रेन ट्रैक पर से जुड़े बॉक्सकार्स की तरह हैं।
मामले में आप सरणी का उपयोग करना चाहते हैं:
echo ${MY_ARRAY[2] # Show the third array element
gamma
echo ${MY_ARRAY[*] # Show all array elements
- alpha beta gamma
echo ${MY_ARRAY[@] # Show all array elements
- alpha beta gamma
echo ${#MY_ARRAY[*]} # Show the total number of array elements
- 3
echo ${#MY_ARRAY[@]} # Show the total number of array elements
- 3
echo ${MY_ARRAY} # Show array element 0 (the first element)
- alpha
आपका प्रश्न के बारे में "यूनिक्स शेल पटकथा लेखन" पूछता है, लेकिन टैग है bash
। वे दो अलग-अलग उत्तर हैं।
शैल के लिए POSIX विनिर्देश के पास सरणी के बारे में कुछ भी कहना नहीं है, क्योंकि मूल बोर्न शैल ने उनका समर्थन नहीं किया था। आज भी, फ्रीबीएसडी, उबंटू लिनक्स और कई अन्य प्रणालियों पर, /bin/sh
में सरणी समर्थन नहीं है। इसलिए यदि आप अपनी स्क्रिप्ट को विभिन्न बोर्न-संगत शैल में काम करना चाहते हैं, तो आपको उनका उपयोग नहीं करना चाहिए। वैकल्पिक रूप से, यदि आप एक विशिष्ट खोल मान रहे हैं, तो सुनिश्चित करें कि उसका पूरा नाम शेबांग लाइन में रखें, उदा। #!/usr/bin/env bash
।
आप bash या zsh, या ksh का आधुनिक संस्करण का उपयोग कर रहे हैं, तो आप इस तरह एक सरणी बना सकते हैं:
myArray=(first "second element" 3rd)
और उपयोग तत्वों को इस
$ echo "${myArray[1]}"
second element
आप सभी प्राप्त कर सकते हैं की तरह "${myArray[@]}"
के माध्यम से तत्व। आप संदर्भित सरणी के हिस्से को प्रतिबंधित करने के लिए स्लाइस नोटेशन $ {array [@]: प्रारंभ करें: लंबाई} का उपयोग कर सकते हैं। पहले तत्व को छोड़ने के लिए "${myArray[@]:1}"
।
सरणी की लंबाई ${#myArray[@]}
है। आप "${!myArray[@]}"
के साथ मौजूदा सरणी से सभी इंडेक्स युक्त एक नई सरणी प्राप्त कर सकते हैं।
ksh93 से पहले ksh के पुराने संस्करणों में भी सरणी थी, लेकिन ब्रांड्स-आधारित नोटेशन नहीं, और न ही उन्होंने स्लाइसिंग का समर्थन किया। आप इस तरह एक सरणी बना सकते हैं, हालांकि:
set -A myArray -- first "second element" 3rd
- 1. malloced arrays और newed arrays
- 2. दो arrays
- 3. गतिशील Arrays
- 4. Backbone.js Arrays
- 5. 2 arrays
- 6. multidimentional arrays
- 7. दो arrays
- 8. ऑब्जेक्ट.क्रेट के साथ बनाई गई जावास्क्रिप्ट Arrays - असली Arrays नहीं?
- 9. Arrays और व्युत्पन्न प्रकार
- 10. जावा: Arrays और वेक्टर
- 11. दो बहुत बड़े Arrays
- 12. रूबी: सहयोगी Arrays
- 13. दो numpy arrays
- 14. दो Arrays की तुलना
- 15. arrays के लिए auto_ptr
- 16. JavaScript Typed Arrays
- 17. सी ++ Arrays और make_unique
- 18. पॉइंटर्स के Arrays
- 19. MySqli और Arrays
- 20. php विलय दो arrays
- 21. Arrays में लंबाई
- 22. जावा और पोस्टग्रेएसक्यूएल Arrays
- 23. डेटाकंट्रैक्टसाइराइज़र आयताकार Arrays
- 24. संयुक्त Arrays के एनएसएआरएआर
- 25. 0 तत्वों के साथ Arrays
- 26. बहुत सारे चर बनाम Arrays
- 27. जीएलएसएल/सी ++: वर्दी के Arrays?
- 28. त्रि-आयामी Arrays को समझना
- 29. एंड्रॉइड संसाधन - Arrays के Array
- 30. जावा में Arrays की सूची
पहला वाला एक अच्छा सवाल है, लेकिन प्रोग्राम निष्पादन चीज़ को इसके साथ क्या करना है? – Frank
http://www.gnu.org/software/bash/manual/html_node/Arrays.html –
देखें: [यूनिक्स बोर्न शैल में Arrays] (http://unix.stackexchange.com/questions/137566/arrays-in -निक्स-बोर्न-शैल # 137571) – agc