Home  >  Article  >  Backend Development  >  Detailed explanation of Shell arrays and associative arrays and example codes

Detailed explanation of Shell arrays and associative arrays and example codes

高洛峰
高洛峰Original
2017-02-07 17:34:331062browse

Shell arrays and associative arrays

1. Array

1.1. Array definition

A pair of parentheses represents an array, and the array elements are separated by space symbols

xiaosi@Qunar:~$ a=(1 2 3)
xiaosi@Qunar:~$ echo $a
1
xiaosi@Qunar:~$ a=("yoona" "lucy" "tom")
xiaosi@Qunar:~$ echo $a
yoona

1.2. Array length, elements, assignment and deletion

Length: Use ${#array name[@or*]} to get the array length

xiaosi@Qunar:~$ echo ${#a[@]}
3
xiaosi@Qunar:~$ echo ${#a[*]}
3

Get elements: Use ${array name[subscript]} to get the array elements (the subscript starts from 0), and the subscript is * or @ to get the entire array content

xiaosi@Qunar:~$ array=("yoona" "lucy" "tom")
xiaosi@Qunar:~$ echo ${array[0]}
yoona
xiaosi@Qunar:~$ echo ${array[1]}
lucy
xiaosi@Qunar:~$ echo ${array[*]}
yoona lucy tom
xiaosi@Qunar:~$ echo ${array[@]}
yoona lucy tom

Assignment: Reference assignment can be made through the array name [subscript]. If the subscript does not exist, a new array element will be automatically added

xiaosi@Qunar:~$ array=("yoona" "lucy" "tom")
xiaosi@Qunar:~$ echo ${array[2]}
tom
xiaosi@Qunar:~$ array[2]=lily
xiaosi@Qunar:~$ echo ${array[2]}
lily

Delete: through unset Array [subscript] can clear the corresponding elements. Without subscript, all data will be cleared.

xiaosi@Qunar:~$ array=("yoona" "lucy" "tom")
xiaosi@Qunar:~$ unset array[1]
xiaosi@Qunar:~$ echo ${array[*]}
yoona tom
xiaosi@Qunar:~$ unset array
xiaosi@Qunar:~$ echo ${array[*]}
xiaosi@Qunar:~$

1.3. Get elements in a certain range

Directly through ${array Name [@ or *]: starting position: length} Get the elements in the given range of the array and return a string, separated by spaces

xiaosi@Qunar:~$ array=(yoona lucy tom)
xiaosi@Qunar:~$ echo ${array[*]}
yoona lucy tom
xiaosi@Qunar:~$ echo ${array[*]:1:2}
lucy tom
xiaosi@Qunar:~$ echo ${array[@]:0:1}
yoona

1.4. Replace

${array name[@ or *]/search character/replace character} This operation will not change the original array content. If you need to modify it, you can see the above example

xiaosi@Qunar:~$ array=(yoona lucy tom)
xiaosi@Qunar:~$ echo ${array[@]/lucy/lily}
yoona lily tom
xiaosi@Qunar:~$ echo ${array[@]}
yoona lucy tom

2. Association Array

Bash supports associative arrays, which can use strings as array indexes. Sometimes it is easier to understand using string indexes.

2.1 Define associative array

First you need to use a declaration statement to declare a variable as an associative array.

xiaosi@Qunar:~$ declare -A assArray

After declaration, there are two ways to add elements to an associative array.

(1) Method of using embedded index-value list

xiaosi@Qunar:~$ assArray=([lucy]=beijing [yoona]=shanghai)
xiaosi@Qunar:~$ echo ${assArray[lucy]}
beijing

(2) Using independent index-value for assignment

xiaosi@Qunar:~$ assArray[lily]=shandong
xiaosi@Qunar:~$ assArray[sunny]=xian
xiaosi@Qunar:~$ echo ${assArray[sunny]}
xian
xiaosi@Qunar:~$ echo ${assArray[lily]}
shandong

2.2 List array index

Each array has an index for search. Use ${!array name[@or*]} to get the index list of the array

xiaosi@Qunar:~$ echo ${!assArray[*]}
lily yoona sunny lucy
xiaosi@Qunar:~$ echo ${!assArray[@]}
lily yoona sunny lucy

2.3 Get all key-value pairs

#! /bin/bash
declare -A cityArray
cityArray=([yoona]=beijing [lucy]=shanghai [lily]=shandong)
for key in ${!cityArray[*]}
do
 echo "${key} come from ${cityArray[$key]}"
done

Result:

xiaosi@Qunar:~/company/sh$ bash array.sh
lily come from shandong
yoona come from beijing
lucy come from shanghai

Thank you for reading, I hope it can help everyone, thank you everyone for your support of this site!

For more detailed explanations and example codes of Shell arrays and associative arrays, please pay attention to the PHP Chinese website!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn