Skip to content

Commit 1bcee55

Browse files
committed
docs: edit debug
1 parent e05ee71 commit 1bcee55

2 files changed

Lines changed: 20 additions & 32 deletions

File tree

docs/debug.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ This is line 3
122122

123123
### FUNCNAME
124124

125-
变量`FUNCNAME`返回一个数组,内容是当前的函数调用堆栈。堆栈最底层的函数(最后一个调用的函数)是该数组的0号成员,以此类推。
125+
变量`FUNCNAME`返回一个数组,内容是当前的函数调用堆栈。该数组的0号成员是当前调用的函数,1号成员是调用当前函数的函数,以此类推。
126126

127127
```bash
128128
#!/bin/bash
@@ -161,7 +161,7 @@ func2: FUNCNAME2 is main
161161

162162
### BASH_SOURCE
163163

164-
变量`BASH_SOURCE`返回一个数组,内容是当前的脚本调用堆栈。堆栈最底层的脚本(即当前执行的脚本)是该数组的0号成员,以此类推。
164+
变量`BASH_SOURCE`返回一个数组,内容是当前的脚本调用堆栈。该数组的0号成员是当前执行的脚本,1号成员是调用当前脚本的脚本,以此类推,跟变量`FUNCNAME`是一一对应关系
165165

166166
下面有两个子脚本`lib1.sh``lib2.sh`
167167

@@ -214,7 +214,7 @@ func2: BASH_SOURCE2 is ./main.sh
214214

215215
### BASH_LINENO
216216

217-
变量`BASH_SOURCE`返回一个数组,内容是每一轮调用堆栈对应的行号`${BASH_LINENO[$i]}``${FUNCNAME[$i+1]}`在文件`${BASH_SOURCE[$i+1]}`里面被调用时的行号
217+
变量`BASH_SOURCE`返回一个数组,内容是每一轮调用对应的行号`${BASH_LINENO[$i]}``${FUNCNAME[$i]}`是一一对应关系,表示`${FUNCNAME[$i]}`在调用它的脚本文件`${BASH_SOURCE[$i+1]}`里面的行号
218218

219219
下面有两个子脚本`lib1.sh``lib2.sh`
220220

@@ -223,7 +223,7 @@ func2: BASH_SOURCE2 is ./main.sh
223223
function func1()
224224
{
225225
echo "func1: BASH_LINENO is ${BASH_LINENO[0]}"
226-
echo "func1: FUNCNAME is ${FUNCNAME[1]}"
226+
echo "func1: FUNCNAME is ${FUNCNAME[0]}"
227227
echo "func1: BASH_SOURCE is ${BASH_SOURCE[1]}"
228228

229229
func2
@@ -234,8 +234,8 @@ function func1()
234234
# lib2.sh
235235
function func2()
236236
{
237-
echo "func2: BASH_LINENO is ${BASH_SOURCE[0]}"
238-
echo "func2: FUNCNAME is ${FUNCNAME[1]}"
237+
echo "func2: BASH_LINENO is ${BASH_LINENO[0]}"
238+
echo "func2: FUNCNAME is ${FUNCNAME[0]}"
239239
echo "func2: BASH_SOURCE is ${BASH_SOURCE[1]}"
240240
}
241241
```
@@ -257,12 +257,12 @@ func1
257257
```bash
258258
$ ./main.sh
259259
func1: BASH_LINENO is 7
260-
func1: FUNCNAME is main
260+
func1: FUNCNAME is func1
261261
func1: BASH_SOURCE is main.sh
262262
func2: BASH_LINENO is 8
263-
func2: FUNCNAME is func1
263+
func2: FUNCNAME is func2
264264
func2: BASH_SOURCE is lib1.sh
265265
```
266266

267-
上面例子中,对于函数`func1`来说,它是在`main.sh`的第7行调用的;对于函数`func2`来说,它是在`lib1.sh`的第8行调用的。
267+
上面例子中,函数`func1`是在`main.sh`的第7行调用,函数`func2`是在`lib1.sh`的第8行调用的。
268268

docs/set.md

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
# set 命令
22

3-
`set`命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本文介绍它的基本用法,让你可以更安心地使用 Bash 脚本。
3+
`set`命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本章介绍`set`的基本用法,帮助你写出更安全的 Bash 脚本。
44

55
## 简介
66

7-
我们知道,Bash 执行脚本的时候,会创建一个新的 Shell。
7+
我们知道,Bash 执行脚本时,会创建一个子 Shell。
88

99
```bash
1010
$ bash script.sh
1111
```
1212

13-
上面代码中,`script.sh`是在一个新的 Shell 里面执行。这个 Shell 就是脚本的执行环境,Bash 默认给定了这个环境的各种参数。
13+
上面代码中,`script.sh`是在一个子 Shell 里面执行。这个子 Shell 就是脚本的执行环境,Bash 默认给定了这个环境的各种参数。
1414

15-
`set`命令用来修改 Shell 环境的运行参数,也就是可以定制环境。一共有十几个参数可以定制,[官方手册](https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html)有完整清单,本文介绍其中最常用的四个
15+
`set`命令用来修改子 Shell 环境的运行参数,即定制环境。一共有十几个参数可以定制,[官方手册](https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html)有完整清单,本章介绍其中最常用的几个
1616

1717
顺便提一下,如果命令行下不带任何参数,直接运行`set`,会显示所有的环境变量和 Shell 函数。
1818

@@ -22,7 +22,7 @@ $ set
2222

2323
## set -u
2424

25-
执行脚本的时候,如果遇到不存在的变量,Bash 默认忽略它。
25+
执行脚本时,如果遇到不存在的变量,Bash 默认忽略它。
2626

2727
```bash
2828
#!/usr/bin/env bash
@@ -32,7 +32,7 @@ echo bar
3232
```
3333

3434
上面代码中,`$a`是一个不存在的变量。执行结果如下。
35-
35+
3636
```bash
3737
$ bash script.sh
3838

@@ -68,7 +68,7 @@ set -o nounset
6868

6969
## set -x
7070

71-
默认情况下,脚本执行后,屏幕只显示运行结果,没有其他内容。如果多个命令连续执行,它们的运行结果就会连续输出。有时会分不清,某一段内容是什么命令产生的。
71+
默认情况下,脚本执行后,只输出运行结果,没有其他内容。如果多个命令连续执行,它们的运行结果就会连续输出。有时会分不清,某一段内容是什么命令产生的。
7272

7373
`set -x`用来在运行结果之前,先输出执行的那一行命令。
7474

@@ -115,7 +115,7 @@ set +x
115115

116116
## Bash 的错误处理
117117

118-
如果脚本里面有运行失败的命令(返回值非0),Bash 默认会继续执行后面的命令。
118+
如果脚本里面有运行失败的命令(返回值非`0`),Bash 默认会继续执行后面的命令。
119119

120120
```bash
121121
#!/usr/bin/env bash
@@ -269,21 +269,9 @@ script.sh:行4: foo: 未找到命令
269269

270270
上面的`-f``-v`参数,可以分别使用`set +f``set +v`关闭。
271271

272-
Bash 默认采用 Emacs 模式进行行编辑,可以用下面的命令切换成 Vi 模式。
273-
274-
```bash
275-
$ set -o vi
276-
```
277-
278-
下面的命令可以切换回 Emacs 的行编辑模式。
279-
280-
```bash
281-
$ set -o emacs
282-
```
283-
284272
## set 命令总结
285273

286-
`set`命令的上面这四个参数,一般都放在一起使用。
274+
上面重点介绍的`set`命令的四个参数,一般都放在一起使用。
287275

288276
```bash
289277
# 写法一
@@ -304,9 +292,9 @@ $ bash -euxo pipefail script.sh
304292

305293
## shopt 命令
306294

307-
`shopt`命令用来调整 Shell 的参数,跟`set`命令的作用很类似。主要原因是`set`是从 Ksh 继承的,属于 POSIX 规范的一部分,而`shopt`是 Bash 特有的。
295+
`shopt`命令用来调整 Shell 的参数,跟`set`命令的作用很类似。之所以会有这两个类似命令的主要原因是,`set`是从 Ksh 继承的,属于 POSIX 规范的一部分,而`shopt`是 Bash 特有的。
308296

309-
接输入`shopt`可以查看所有参数,以及它们各自打开和关闭的状态。
297+
直接输入`shopt`可以查看所有参数,以及它们各自打开和关闭的状态。
310298

311299
```bash
312300
$ shopt

0 commit comments

Comments
 (0)