File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Load Diff This file was deleted.
Original file line number Diff line number Diff line change 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` $(...) ` 可以扩展成另一个命令的运行结果,内部命令的所有输出都会作为返回值。
Original file line number Diff line number Diff line change 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+
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 ` 作为输入。
Original file line number Diff line number Diff 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
271272Bash 默认采用 Emacs 模式进行行编辑,可以用下面的命令切换成 Vi 模式。
272273
Original file line number Diff line number Diff line change @@ -24,7 +24,7 @@ $ trap -l
2424` trap ` 的命令格式如下。
2525
2626``` bash
27- $ trap [动作] [信号]
27+ $ trap [动作] [信号1] [信号2] ...
2828```
2929
3030上面代码中,“动作”是一个 Bash 命令,“信号”常用的有以下几个。
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments