Skip to content

Commit e05ee71

Browse files
committed
docs: edit array
1 parent 0b079c0 commit e05ee71

1 file changed

Lines changed: 46 additions & 44 deletions

File tree

docs/array.md

Lines changed: 46 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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]
11098
a[0]
11199
```
112100

113-
上面例子中,数组的第一个元素是`a`。如果不加大括号,Bash 会直接读取`$array`的值,然后将`[0]`按照原样输出。
101+
上面例子中,数组的第一个元素是`a`。如果不加大括号,Bash 会直接读取`$array`首成员的值,然后将`[0]`按照原样输出。
114102

115103
### 读取所有成员
116104

@@ -122,7 +110,7 @@ $ echo ${foo[@]}
122110
a b c d e f
123111
```
124112

125-
`for`循环可以遍历数组
113+
这两个特殊索引配合`for`循环,就可以用来遍历数组
126114

127115
```bash
128116
for 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
182170
Activity: 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]}
220208
A
221209
```
222210
223211
上面例子中,`foo`是一个数组,赋值的时候不指定位置,实际上是给`foo[0]`赋值。
224212
225-
引用一个不带下标的数组变量,则指的是`0`号位置的数组元素。
213+
引用一个不带下标的数组变量,则引用的是`0`号位置的数组元素。
226214
227215
```bash
228216
$ foo=(a b c d e f)
@@ -234,7 +222,7 @@ a
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]}
265253
3
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
291279
done
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}
303291
bananas 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}
312300
eggs 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"
382384
colors["blue"]="#0000ff"
383385
```
384386
385-
不同于整数索引的数组,仅仅引用它们就能创建数组,关联数组必须用带有 -A 选项的 declare 命令创建
387+
整数索引的数组,可以直接使用变量名创建数组,关联数组则必须用带有`-A`选项的`declare`命令声明创建
386388
387-
访问关联数组元素的方式几乎与整数索引数组相同:
389+
访问关联数组成员的方式,几乎与整数索引数组相同。
388390
389391
```bash
390392
echo ${colors["blue"]}

0 commit comments

Comments
 (0)