@@ -20,20 +20,6 @@ $ array[1]=val
2020$ array[2]=val
2121```
2222
23- 先用` declare -a ` 命令声明一个数组,也是可以的。
24-
25- ``` bash
26- $ declare -a ARRAYNAME
27- ```
28-
29- ` read -a ` 命令也可以将命令行输入,读入一个数组。
30-
31- ``` bash
32- $ read -a dice
33- ```
34-
35- 上面命令将用户的命令行输入,读入数组` dice ` 。
36-
3723数组也可以采用一次性赋值的方式创建。
3824
3925``` bash
@@ -51,7 +37,7 @@ ARRAY=(
5137采用上面方式创建数组时,可以按照默认顺序赋值,也可以在每个值前面指定位置。
5238
5339``` bash
54- $ array(a b c)
40+ $ array= (a b c)
5541$ array=([2]=c [0]=a [1]=b)
5642
5743$ days=(Sun Mon Tue Wed Thu Fri Sat)
@@ -66,7 +52,7 @@ names=(hatter [5]=duchess alice)
6652
6753上面例子中,` hatter ` 是数组的0号位置,` duchess ` 是5号位置,` alice ` 是6号位置。
6854
69- 没有赋值的数组元素是不存在的,默认值是空字符串 。
55+ 没有赋值的数组元素的默认值是空字符串 。
7056
7157定义数组的时候,可以使用通配符。
7258
@@ -76,18 +62,20 @@ $ mp3s=( *.mp3 )
7662
7763上面例子中,将当前目录的所有 MP3 文件,放进一个数组。
7864
79- 在数组末尾附加数据,可以使用 ` += ` 赋值运算符,能够自动地把值附加到数组末尾。否则,还需要知道数组的最大位置,这就比较麻烦 。
65+ 先用 ` declare -a ` 命令声明一个数组,也是可以的 。
8066
8167``` bash
82- $ foo=(a b c)
83- $ echo ${foo[@]}
84- a b c
68+ $ declare -a ARRAYNAME
69+ ```
8570
86- $ foo+=(d e f)
87- $ echo ${foo[@]}
88- a b c d e f
71+ ` read -a ` 命令则是将用户的命令行输入,读入一个数组。
72+
73+ ``` bash
74+ $ read -a dice
8975```
9076
77+ 上面命令将用户的命令行输入,读入数组` dice ` 。
78+
9179## 读取数组
9280
9381### 读取单个元素
@@ -110,7 +98,7 @@ $ echo $array[0]
11098a[0]
11199```
112100
113- 上面例子中,数组的第一个元素是` a ` 。如果不加大括号,Bash 会直接读取` $array ` 的值 ,然后将` [0] ` 按照原样输出。
101+ 上面例子中,数组的第一个元素是` a ` 。如果不加大括号,Bash 会直接读取` $array ` 首成员的值 ,然后将` [0] ` 按照原样输出。
114102
115103### 读取所有成员
116104
@@ -122,7 +110,7 @@ $ echo ${foo[@]}
122110a b c d e f
123111```
124112
125- ` for ` 循环可以遍历数组 。
113+ 这两个特殊索引配合 ` for ` 循环,就可以用来遍历数组 。
126114
127115``` bash
128116for i in " ${names[@]} " ; do
@@ -165,7 +153,7 @@ Activity: surfing
165153
166154上面例子中,` ${activities[@]} ` 放在双引号之中,遍历就会返回正确的结果。
167155
168- ` ${activities[*]} ` 如果不放在双引号之中 ,跟` ${activities[@]} ` 不放双引号是一样的 。
156+ ` ${activities[*]} ` 不放在双引号之中 ,跟` ${activities[@]} ` 不放在双引号之中是一样的 。
169157
170158``` bash
171159$ for act in ${activities[*]} ; \
@@ -182,7 +170,7 @@ Activity: rafting
182170Activity: surfing
183171```
184172
185- ` ${activities[*]} ` 如果放在双引号之中 ,所有元素就会变成单个字符串返回。
173+ ` ${activities[*]} ` 放在双引号之中 ,所有元素就会变成单个字符串返回。
186174
187175``` bash
188176$ for act in " ${activities[*]} " ; \
@@ -214,15 +202,15 @@ $ hobbies=( "${activities[@]" diving )
214202如果读取数组成员时,没有读取指定哪一个位置的成员,默认使用` 0` 号位置。
215203
216204` ` ` bash
217- $ foo=(a b c d e f)
205+ $ declare -a foo
218206$ foo=A
219207$ echo ${foo[0]}
220208A
221209` ` `
222210
223211上面例子中,` foo` 是一个数组,赋值的时候不指定位置,实际上是给` foo[0]` 赋值。
224212
225- 引用一个不带下标的数组变量,则指的是 ` 0` 号位置的数组元素。
213+ 引用一个不带下标的数组变量,则引用的是 ` 0` 号位置的数组元素。
226214
227215` ` ` bash
228216$ foo=(a b c d e f)
234222
235223上面例子中,引用数组元素的时候,没有指定位置,结果返回的是` 0` 号位置。
236224
237- # ## 数组的长度
225+ # # 数组的长度
238226
239227要想知道数组的长度(即一共包含多少成员),可以使用下面两种语法。
240228
@@ -257,19 +245,19 @@ $ echo ${#a[@]}
257245
258246上面例子中,把字符串赋值给` 100` 位置的数组元素,这时的数组只有一个元素。
259247
260- 注意,如果用这种语法去读取具体的数组元素,就会返回该元素的字符串长度 。这一点必须小心。
248+ 注意,如果用这种语法去读取具体的数组成员,就会返回该成员的字符串长度 。这一点必须小心。
261249
262250` ` ` bash
263251$ a[100]=foo
264252$ echo ${# a[100]}
2652533
266254` ` `
267255
268- 上面例子中,` ${# a[100]} ` 实际上是返回变量 ` a[100]` 的值` foo` 的字符串长度。
256+ 上面例子中,` ${# a[100]} ` 实际上是返回数组第100号成员 ` a[100]` 的值( ` foo` ) 的字符串长度。
269257
270- # ## 有值的位置
258+ # # 提取数组序号
271259
272- ` ${! array[@]} ` 或` ${! array[*]} ` ,可以返回数组的哪些位置是有值的 。
260+ ` ${! array[@]} ` 或` ${! array[*]} ` ,可以返回数组的成员序号,即哪些位置是有值的 。
273261
274262` ` ` bash
275263$ arr=([5]=a [9]=b [23]=c)
@@ -291,9 +279,9 @@ for i in ${!arr[@]};do
291279done
292280` ` `
293281
294- # # 提取数组元素
282+ # # 提取数组成员
295283
296- ` ${array[@]: position: length} ` 的语法可以提取数组元素 。
284+ ` ${array[@]: position: length} ` 的语法可以提取数组成员 。
297285
298286` ` ` bash
299287$ food=( apples bananas cucumbers dates eggs fajitas grapes )
@@ -303,16 +291,30 @@ $ echo ${food[@]:1:3}
303291bananas cucumbers dates
304292` ` `
305293
306- 上面例子中,` ${food[@]: 1: 1} ` 返回从数组1号位置开始的1个元素 ,` ${food[@]: 1: 3} ` 返回从1号位置开始的3个元素 。
294+ 上面例子中,` ${food[@]: 1: 1} ` 返回从数组1号位置开始的1个成员 ,` ${food[@]: 1: 3} ` 返回从1号位置开始的3个成员 。
307295
308- 如果省略长度参数,则返回从指定位置开始的所有元素 。
296+ 如果省略长度参数` length ` ,则返回从指定位置开始的所有成员 。
309297
310298` ` ` bash
311299$ echo ${food[@]: 4}
312300eggs fajitas grapes
313301` ` `
314302
315- 上面例子返回从4号位置开始到结束的所有元素。
303+ 上面例子返回从4号位置开始到结束的所有成员。
304+
305+ # # 追加数组成员
306+
307+ 数组末尾追加成员,可以使用` +=` 赋值运算符。它能够自动地把值追加到数组末尾。否则,就需要知道数组的最大序号,比较麻烦。
308+
309+ ` ` ` bash
310+ $ foo=(a b c)
311+ $ echo ${foo[@]}
312+ a b c
313+
314+ $ foo+=(d e f)
315+ $ echo ${foo[@]}
316+ a b c d e f
317+ ` ` `
316318
317319# # 删除数组
318320
@@ -330,7 +332,7 @@ a b d e f
330332
331333上面例子中,删除了数组中的第三个元素,下标为2。
332334
333- 如果想删除一个成员,也可以将这个成员设为空值 。
335+ 删除成员也可以将这个成员设为空值 。
334336
335337` ` ` bash
336338$ foo=(a b c d e f)
@@ -341,15 +343,15 @@ a c d e f
341343
342344上面例子中,将数组的第二个成员设为空字符串,就删除了这个成员。
343345
344- 由于空字符串等于空值 ,所以下面这样写也可以,但是不推荐这种写法 。
346+ 由于空值就是空字符串 ,所以下面这样写也可以,但是不建议这种写法 。
345347
346348` ` ` bash
347349$ foo[1]=
348350` ` `
349351
350352上面的写法也相当于删除了数组的第二个成员。
351353
352- 如果不写下标,只写数组名,就相当于引用数组的第一个成员 。
354+ 直接将数组变量赋值为空字符串,相当于删除数组的第一个成员 。
353355
354356` ` ` bash
355357$ foo=(a b c d e f)
@@ -382,9 +384,9 @@ colors["green"]="#00ff00"
382384colors[" blue" ]=" # 0000ff"
383385` ` `
384386
385- 不同于整数索引的数组,仅仅引用它们就能创建数组,关联数组必须用带有 -A 选项的 declare 命令创建 。
387+ 整数索引的数组,可以直接使用变量名创建数组,关联数组则必须用带有 ` -A ` 选项的` declare` 命令声明创建 。
386388
387- 访问关联数组元素的方式几乎与整数索引数组相同:
389+ 访问关联数组成员的方式,几乎与整数索引数组相同。
388390
389391` ` ` bash
390392echo ${colors["blue"]}
0 commit comments