Skip to content

Commit f748b82

Browse files
committed
docs: edit prompt
1 parent c15e9f7 commit f748b82

8 files changed

Lines changed: 146 additions & 136 deletions

File tree

docs/archives/prompt.md

Lines changed: 0 additions & 114 deletions
This file was deleted.

docs/expansion.md

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ done
344344

345345
## 变量扩展
346346

347-
Bash 将美元符号`$`开头的词元视为变量,将其扩展成变量值。
347+
Bash 将美元符号`$`开头的词元视为变量,将其扩展成变量值,详见《Bash 变量》一章
348348

349349
```bash
350350
$ echo $SHELL
@@ -367,19 +367,6 @@ SECONDS SHELL SHELLOPTS SHLVL SSH_AGENT_PID SSH_AUTH_SOCK
367367

368368
上面例子中,`${!S*}`扩展成所有以`S`开头的变量名。
369369

370-
`${VAR:=value}`可以设置变量的默认值,即如果变量名有对应的值,就返回该值,否则创建变量,并将其设为默认值。
371-
372-
```bash
373-
$ f1=bar
374-
$ echo ${f1:=baz}
375-
bar
376-
377-
$ echo ${f2:=baz}
378-
baz
379-
```
380-
381-
上面例子中,变量`$f1`有值`bar`,则返回`bar`;变量`$f2`不存在,则创建该变量,并将设为默认值`baz`
382-
383370
## 子命令扩展
384371

385372
`$(...)`可以扩展成另一个命令的运行结果,内部命令的所有输出都会作为返回值。

docs/prompt.md

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# 命令提示符
2+
3+
用户进入 Bash 以后,Bash 会显示一个命令提示符,用来提示用户在该位置后面输入命令。
4+
5+
## 环境变量 PS1
6+
7+
命令提示符通常是美元符号`$`,对于根用户则是`#`。这个符号是环境变量`PS1`决定的,执行下面的命令,可以看到当前命令提示符的定义。
8+
9+
```bash
10+
$ echo $PS1
11+
```
12+
13+
Bash 允许用户自定义命令提示符,只要改写这个变量即可。改写后的`PS1`,可以放在用户的 Bash 配置文件`.bashrc`里面,以后新建 Bash 对话时,新的提示符就会生效。要在当前窗口看到修改后的提示符,可以执行下面的命令。
14+
15+
```bash
16+
$ source ~/.bashrc
17+
```
18+
19+
命令提示符的定义,可以包含特殊的转义字符,表示特定内容。
20+
21+
- `\a`:响铃,计算机发出一记声音。
22+
- `\d`:以星期、月、日格式表示当前日期,例如“Mon May 26”。
23+
- `\h`:本机的主机名。
24+
- `\H`:完整的主机名。
25+
- `\j`:运行在当前 Shell 会话的工作数。
26+
- `\l`:当前终端设备名。
27+
- `\n`:一个换行符。
28+
- `\r`:一个回车符。
29+
- `\s`:Shell 的名称。
30+
- `\t`:24小时制的`hours:minutes:seconds`格式表示当前时间。
31+
- `\T`:12小时制的当前时间。
32+
- `\@`:12小时制的`AM/PM`格式表示当前时间。
33+
- `\A`:24小时制的`hours:minutes`表示当前时间。
34+
- `\u`:当前用户名。
35+
- `\v`:Shell 的版本号。
36+
- `\V`:Shell 的版本号和发布号。
37+
- `\w`:当前的工作路径。
38+
- `\W`:当前目录名。
39+
- `\!`:当前命令在命令历史中的编号。
40+
- `\#`:当前 shell 会话中的命令数。
41+
- `\$`:普通用户显示为`$`字符,根用户显示为`#`字符。
42+
- `\[`:非打印字符序列的开始标志。
43+
- `\]`:非打印字符序列的结束标志。
44+
45+
举例来说,`[\u@\h \W]\$`这个提示符定义,显示出来就是`[user@host ~]$`(具体的显示内容取决于你的系统)。
46+
47+
```bash
48+
[user@host ~]$ echo $PS1
49+
[\u@\h \W]\$
50+
```
51+
52+
改写`PS1`变量,就可以改变这个命令提示符。
53+
54+
```bash
55+
$ PS1="\A \h \$ "
56+
17:33 host $
57+
```
58+
59+
注意,`$`后面最好跟一个空格,这样的话,用户的输入与提示符就不会连在一起。
60+
61+
## 颜色
62+
63+
默认情况下,命令提示符是显示终端预定义的颜色。Bash 允许自定义提示符颜色。
64+
65+
使用下面的代码,可以设定其后文本的颜色。
66+
67+
- `\033[0;30m`:黑色
68+
- `\033[1;30m`:深灰色
69+
- `\033[0;31m`:红色
70+
- `\033[1;31m`:浅红色
71+
- `\033[0;32m`:绿色
72+
- `\033[1;32m`:浅绿色
73+
- `\033[0;33m`:棕色
74+
- `\033[1;33m`:黄色
75+
- `\033[0;34m`:蓝色
76+
- `\033[1;34m`:浅蓝色
77+
- `\033[0;35m`:粉红
78+
- `\033[1;35m`:浅粉色
79+
- `\033[0;36m`:青色
80+
- `\033[1;36m`:浅青色
81+
- `\033[0;37m`:浅灰色
82+
- `\033[1;37m`:白色
83+
84+
举例来说,如果要将提示符设为红色,可以将`PS1`设成下面的代码。
85+
86+
```bash
87+
PS1='\[\033[0;31m\]<\u@\h \W>\$'
88+
```
89+
90+
但是,上面这样设置以后,用户在提示符后面输入的文本也是红色的。为了解决这个问题, 可以在结尾添加另一个特殊代码,将其后的文本恢复到原来的颜色。
91+
92+
```bash
93+
PS1='\[\033[0;31m\]<\u@\h \W>\$\[\033[00m\]'
94+
```
95+
96+
除了设置前景颜色,Bash 还允许设置背景颜色。
97+
98+
- `\033[0;40m`:蓝色
99+
- `\033[1;44m`:黑色
100+
- `\033[0;41m`:红色
101+
- `\033[1;45m`:粉红
102+
- `\033[0;42m`:绿色
103+
- `\033[1;46m`:青色
104+
- `\033[0;43m`:棕色
105+
- `\033[1;47m`:浅灰色
106+
107+
下面是一个带有红色背景的提示符。
108+
109+
```bash
110+
PS1='\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] '
111+
```
112+

docs/readline.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ Readline 提供了许多快捷键,用来快速地移动光标。默认的快
4040
- `Ctrl + f`:向行尾移动一个字符,与右箭头作用相同。
4141
- `Ctrl + d`:删除光标所在位置的字符。
4242
- `Alt + f`:移动到当前单词的词尾。
43-
- `Alt + b`移动到当前档次的词首
43+
- `Alt + b`移动到当前单词的词首
4444

4545
上面快捷键中的 Alt 键,也可以用 ESC 键代替。另外,使用`Ctrl + d`的时候,如果当前行没有任何字符,会导致退出当前 Shell,所以要小心。
4646

docs/script.md

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,11 +435,35 @@ echo "REPLY = '$REPLY'"
435435

436436
上面例子中,先显示`Enter one or more values >`,再接受用户的输入。
437437

438-
**(3)其他参数**
438+
**(3)-a 参数**
439+
440+
`-a`参数把用户的输入赋值给一个数组,从零号位置开始。
441+
442+
```bash
443+
$ read -a people
444+
alice duchess dodo
445+
$ echo ${people[2]}
446+
dodo
447+
```
448+
449+
上面例子中,用户输入被赋值给一个数组`people`,这个数组的2号成员就是`dodo`
450+
451+
**(4)-n 参数**
452+
453+
`-n`参数指定只读取若干个字符,作为变量值,而不是整行读取。
454+
455+
```bash
456+
$ read -n 3 letter
457+
abcdefghij
458+
$ echo $letter
459+
abc
460+
```
461+
462+
上面例子中,变量`letter`只包含3个字母。
463+
464+
**(5)其他参数**
439465

440-
- `-a array`:把用户输入赋值到数组`array`中,从零号位置开始。
441466
- `-d delimiter`:定义字符串`delimiter`的第一个字符作为用户输入的结束,而不是一个换行符。
442-
- `-n num`:读取`num`个输入的字符,而不是读取整行。
443467
- `-r`:raw 模式,表示不把用户输入的反斜杠字符解释为转义字符。
444468
- `-s`:使得用户的输入不显示在屏幕上,这常常用于输入密码或保密信息。
445469
- `-u fd`:使用文件描述符`fd`作为输入。

docs/set.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,11 @@ script.sh:行4: foo: 未找到命令
263263

264264
`set`命令还有一些其他参数。
265265

266+
- `set -n`:等同于`set -o noexec`,不运行命令,只检查语法是否正确。
266267
- `set -f`:等同于`set -o noglob`,表示不对通配符进行文件名扩展。
267268
- `set -v`:等同于`set -o verbose`,表示打印 Shell 接收到的每一行输入。
268269

269-
上面两个参数,可以分别使用`set +f``set +v`关闭。
270+
上面的`-f``-v`参数,可以分别使用`set +f``set +v`关闭。
270271

271272
Bash 默认采用 Emacs 模式进行行编辑,可以用下面的命令切换成 Vi 模式。
272273

docs/trap.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ $ trap -l
2424
`trap`的命令格式如下。
2525

2626
```bash
27-
$ trap [动作] [信号]
27+
$ trap [动作] [信号1] [信号2] ...
2828
```
2929

3030
上面代码中,“动作”是一个 Bash 命令,“信号”常用的有以下几个。

docs/variable.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ $ printenv
1515
下面是一些常见的环境变量。
1616

1717
- `BASHPID`:Bash 进程的进程 ID。
18-
- `DISPLAY`显示器的名字,通常是 ":0",表示第一个显示器
18+
- `DISPLAY`图形环境的显示器名字,通常是`:0`,表示 X Server 的第一个显示器
1919
- `EDITOR`:文本编辑器的名字。
2020
- `HOME`:用户的主目录。
2121
- `HOST`:当前主机的名称。
@@ -155,7 +155,7 @@ unset NAME
155155

156156
## 输出变量
157157

158-
像上一节那样创建的变量,都是局部变量,仅可用于当前 Shell,当前 Shell 的子进程读取不到此变量。为了把变量传递到子 Shell,需要使用`export`命令。这样输出的变量,对于子 Shell 来说就是环境变量。
158+
像上一节那样创建的变量,都是局部变量,仅可用于当前 Shell,当前 Shell 的子 Shell 读取不到此变量。为了把变量传递到子 Shell,需要使用`export`命令。这样输出的变量,对于子 Shell 来说就是环境变量。
159159

160160
`export`命令用来向子 Shell 输出变量。变量的赋值和输出通常在一个步骤中完成。
161161

0 commit comments

Comments
 (0)