Detailed explanation of Shell arrays and associative arrays and example codes

高洛峰
Release: 2023-03-05 15:02:01
Original
1061 people have browsed it

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
Copy after login

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
Copy after login

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
Copy after login

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
Copy after login

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:~$
Copy after login

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
Copy after login

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
Copy after login

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
Copy after login

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
Copy after login

(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
Copy after login

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
Copy after login

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
Copy after login

Result:

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

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!


Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!