खोज…


एरियर असाइनमेंट

सूची असाइनमेंट

यदि आप पर्ल, सी, या जावा से परिचित हैं, तो आप सोच सकते हैं कि बैश अलग तत्वों को अलग करने के लिए अल्पविराम का उपयोग करेगा, हालांकि ऐसा नहीं है; इसके बजाय, बैश रिक्त स्थान का उपयोग करता है:

 # 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'

नाम (सहयोगी सरणी) द्वारा असाइनमेंट

4.0
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]}"
4.3

एक्‍सटेंशन एक्‍सटेंशन सिंटैक्स का उपयोग करके अंतिम तत्‍व प्रिंट करें

echo "${arr[@]: -1 }"
4.3

सबस्क्रिप्ट सिंटैक्स का उपयोग करके अंतिम तत्व प्रिंट करें

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
3.1

संलग्न

सरणी को संशोधित करें, यदि कोई सबस्क्रिप्ट निर्दिष्ट नहीं है, तो तत्वों को अंत तक जोड़ना।

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]

सहयोगी एरे

4.0

एक सहयोगी सरणी घोषित करें

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
2.04

लूप के 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
2.04

संख्यात्मक सशर्त के साथ लूप का उपयोग 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
2.04

एक का उपयोग करते हुए 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
4.0

mapfile या readarray का उपयोग करना (जो समानार्थी हैं):

mapfile -t arr < file
readarray -t arr < file


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow