खोज…
एरियर असाइनमेंट
सूची असाइनमेंट
यदि आप पर्ल, सी, या जावा से परिचित हैं, तो आप सोच सकते हैं कि बैश अलग तत्वों को अलग करने के लिए अल्पविराम का उपयोग करेगा, हालांकि ऐसा नहीं है; इसके बजाय, बैश रिक्त स्थान का उपयोग करता है:
# Array in Perl
my @array = (1, 2, 3, 4);
# Array in Bash
array=(1 2 3 4)
नए तत्वों के साथ एक सरणी बनाएं:
array=('first element' 'second element' 'third element')
सदस्यता असाइनमेंट
स्पष्ट तत्व सूचकांकों के साथ एक सरणी बनाएं:
array=([3]='fourth element' [4]='fifth element')
सूचकांक द्वारा असाइनमेंट
array[0]='first element'
array[1]='second element'
नाम (सहयोगी सरणी) द्वारा असाइनमेंट
declare -A array
array[first]='First element'
array[second]='Second element'
गतिशील असाइनमेंट
अन्य कमांड के आउटपुट से एक सरणी बनाएं, उदाहरण के लिए 1 से 10 तक की सीमा प्राप्त करने के लिए seq का उपयोग करें:
array=(`seq 1 10`)
स्क्रिप्ट के इनपुट तर्कों से असाइनमेंट:
array=("$@")
छोरों के भीतर असाइनमेंट:
while read -r; do
#array+=("$REPLY") # Array append
array[$i]="$REPLY" # Assignment by index
let i++ # Increment index
done < <(seq 1 10) # command substitution
echo ${array[@]} # output: 1 2 3 4 5 6 7 8 9 10
जहां $REPLY
हमेशा वर्तमान इनपुट है
ऐरे तत्वों तक पहुँचना
इंडेक्स 0 पर प्रिंट तत्व
echo "${array[0]}"
एक्सटेंशन एक्सटेंशन सिंटैक्स का उपयोग करके अंतिम तत्व प्रिंट करें
echo "${arr[@]: -1 }"
सबस्क्रिप्ट सिंटैक्स का उपयोग करके अंतिम तत्व प्रिंट करें
echo "${array[-1]}"
सभी तत्वों को अलग-अलग उद्धृत करें
echo "${array[@]}"
एकल उद्धृत स्ट्रिंग के रूप में सभी तत्वों को प्रिंट करें
echo "${array[*]}"
सूचकांक 1 से सभी तत्वों को प्रिंट करें, प्रत्येक को अलग से उद्धृत किया गया है
echo "${array[@]:1}"
सूचकांक 1 से 3 तत्वों को प्रिंट करें, प्रत्येक को अलग से उद्धृत किया गया है
echo "${array[@]:1:3}"
स्ट्रिंग संचालन
यदि किसी एकल तत्व का जिक्र है, तो स्ट्रिंग संचालन की अनुमति है:
array=(zero one two)
echo "${array[0]:0:3}" # gives out zer (chars at position 0, 1 and 2 in the string zero)
echo "${array[0]:1:3}" # gives out ero (chars at position 1, 2 and 3 in the string zero)
so ${array[$i]:N:M}
, स्ट्रिंग ${array[$i]}
में N
th पॉजिशन (0 से शुरू) को M
निम्नलिखित वर्णों से एक स्ट्रिंग देता है।
ऐरे की लंबाई
${#array[@]}
की लंबाई देता है ${array[@]}
:
array=('first element' 'second element' 'third element')
echo "${#array[@]}" # gives out a length of 3
यह एकल तत्वों में स्ट्रिंग्स के साथ भी काम करता है:
echo "${#array[0]}" # gives out the lenght of the string at element 0: 13
सरणी संशोधन
सूचकांक बदलें
सरणी में किसी विशेष तत्व को प्रारंभ या अद्यतन करना
array[10]="elevenths element" # because it's starting with 0
संलग्न
सरणी को संशोधित करें, यदि कोई सबस्क्रिप्ट निर्दिष्ट नहीं है, तो तत्वों को अंत तक जोड़ना।
array+=('fourth element' 'fifth element')
एक नई पैरामीटर सूची के साथ पूरे एरे को बदलें।
array=("${array[@]}" "fourth element" "fifth element")
शुरुआत में एक तत्व जोड़ें:
array=("new element" "${array[@]}")
सम्मिलित करें
दिए गए सूचकांक में एक तत्व डालें:
arr=(a b c d)
# insert an element at index 2
i=2
arr=("${arr[@]:0:$i}" 'new' "${arr[@]:$i}")
echo "${arr[2]}" #output: new
हटाएं
unset
बिलिन का उपयोग करके सरणी इंडेक्स हटाएं:
arr=(a b c)
echo "${arr[@]}" # outputs: a b c
echo "${!arr[@]}" # outputs: 0 1 2
unset -v 'arr[1]'
echo "${arr[@]}" # outputs: a c
echo "${!arr[@]}" # outputs: 0 2
मर्ज
array3=("${array1[@]}" "${array2[@]}")
यह विरल सरणियों के लिए भी काम करता है।
किसी सरणी को पुन: अनुक्रमित करना
यह उपयोगी हो सकता है अगर तत्वों को एक सरणी से हटा दिया गया है, या यदि आप अनिश्चित हैं कि क्या सरणी में अंतराल हैं। बिना अंतराल के सूचकांकों को फिर से बनाना:
array=("${array[@]}")
एरे इटरेशन
सरणी पुनरावृत्ति दो स्वादों में आती है, फॉरेक्स और क्लासिक फॉर-लूप:
a=(1 2 3 4)
# foreach loop
for y in "${a[@]}"; do
# act on $y
echo "$y"
done
# classic for-loop
for ((idx=0; idx < ${#a[@]}; ++idx)); do
# act on ${a[$idx]}
echo "${a[$idx]}"
done
आप कमांड के आउटपुट पर भी पुनरावृति कर सकते हैं:
a=($(tr ',' ' ' <<<"a,b,c,d")) # tr can transform one character to another
for y in "${a[@]}"; do
echo "$y"
done
नष्ट करें, हटाएं, या एक ऐरे को रद्द करें
किसी सरणी को नष्ट करने, हटाने या परेशान करने के लिए:
unset array
किसी एकल सरणी तत्व को नष्ट करने, हटाने या परेशान करने के लिए:
unset array[10]
सहयोगी एरे
एक सहयोगी सरणी घोषित करें
declare -A aa
प्रारंभ या उपयोग करने से पहले एक सहयोगी सरणी की घोषणा करना अनिवार्य है।
प्रारंभिक तत्वों
आप तत्वों को एक बार में निम्नानुसार शुरू कर सकते हैं:
aa[hello]=world
aa[ab]=cd
aa["key with space"]="hello world"
आप किसी एकल कथन में संपूर्ण सहयोगी सारणी को इनिशियलाइज़ भी कर सकते हैं:
aa=([hello]=world [ab]=cd ["key with space"]="hello world")
एक सहयोगी सरणी तत्व तक पहुँचें
echo ${aa[hello]}
# Out: world
सहयोगी सरणी कुंजी सूचीबद्ध करना
echo "${!aa[@]}"
#Out: hello ab key with space
सहयोगी सरणी मूल्यों की सूची बनाना
echo "${aa[@]}"
#Out: world cd hello world
साहचर्य सरणी कुंजियों और मूल्यों पर Iterate
for key in "${!aa[@]}"; do
echo "Key: ${key}"
echo "Value: ${array[$key]}"
done
# Out:
# Key: hello
# Value: world
# Key: ab
# Value: cd
# Key: key with space
# Value: hello world
साहचर्य सरणी तत्वों की गणना करें
echo "${#aa[@]}"
# Out: 3
इनिशियल इंडेक्स की सूची
किसी सरणी में inialized अनुक्रमित की सूची प्राप्त करें
$ arr[2]='second'
$ arr[10]='tenth'
$ arr[25]='twenty five'
$ echo ${!arr[@]}
2 10 25
एक सरणी के माध्यम से लूपिंग
हमारे उदाहरण सरणी:
arr=(a b c d e f)
for..in
लूप का उपयोग करना:
for i in "${arr[@]}"; do
echo "$i"
done
लूप के for
C- शैली का उपयोग करना:
for ((i=0;i<${#arr[@]};i++)); do
echo "${arr[$i]}"
done
लूप का उपयोग while
:
i=0
while [ $i -lt ${#arr[@]} ]; do
echo "${arr[$i]}"
i=$((i + 1))
done
संख्यात्मक सशर्त के साथ लूप का उपयोग while
:
i=0
while (( $i < ${#arr[@]} )); do
echo "${arr[$i]}"
((i++))
done
एक का उपयोग करते हुए until
पाश:
i=0
until [ $i -ge ${#arr[@]} ]; do
echo "${arr[$i]}"
i=$((i + 1))
done
एक का उपयोग करते हुए until
संख्यात्मक सशर्त साथ पाश:
i=0
until (( $i >= ${#arr[@]} )); do
echo "${arr[$i]}"
((i++))
done
स्ट्रिंग से सरणी
stringVar="Apple Orange Banana Mango"
arrayVar=(${stringVar// / })
स्ट्रिंग में प्रत्येक स्थान परिणामी सरणी में एक नया आइटम दर्शाता है।
echo ${arrayVar[0]} # will print Apple
echo ${arrayVar[3]} # will print Mango
इसी तरह, अन्य पात्रों का उपयोग सीमांकक के लिए किया जा सकता है।
stringVar="Apple+Orange+Banana+Mango"
arrayVar=(${stringVar//+/ })
echo ${arrayVar[0]} # will print Apple
echo ${arrayVar[2]} # will print Banana
एरे डालने का कार्य
यह फ़ंक्शन किसी दिए गए इंडेक्स में एक एरे में एक तत्व सम्मिलित करेगा:
insert(){
h='
################## insert ########################
# Usage:
# insert arr_name index element
#
# Parameters:
# arr_name : Name of the array variable
# index : Index to insert at
# element : Element to insert
##################################################
'
[[ $1 = -h ]] && { echo "$h" >/dev/stderr; return 1; }
declare -n __arr__=$1 # reference to the array variable
i=$2 # index to insert at
el="$3" # element to insert
# handle errors
[[ ! "$i" =~ ^[0-9]+$ ]] && { echo "E: insert: index must be a valid integer" >/dev/stderr; return 1; }
(( $1 < 0 )) && { echo "E: insert: index can not be negative" >/dev/stderr; return 1; }
# Now insert $el at $i
__arr__=("${__arr__[@]:0:$i}" "$el" "${__arr__[@]:$i}")
}
उपयोग:
insert array_variable_name index element
उदाहरण:
arr=(a b c d)
echo "${arr[2]}" # output: c
# Now call the insert function and pass the array variable name,
# index to insert at
# and the element to insert
insert arr 2 'New Element'
# 'New Element' was inserted at index 2 in arr, now print them
echo "${arr[2]}" # output: New Element
echo "${arr[3]}" # output: c
एक सरणी में एक पूरी फ़ाइल पढ़ना
एक ही चरण में पढ़ना:
IFS=$'\n' read -r -a arr < file
एक लूप में पढ़ना:
arr=()
while IFS= read -r line; do
arr+=("$line")
done
mapfile
या readarray
का उपयोग करना (जो समानार्थी हैं):
mapfile -t arr < file
readarray -t arr < file