@@ -282,62 +282,6 @@ ls: 无法访问'-l': 没有那个文件或目录
282282
283283上面例子中,变量` myPath ` 的值为` -l ` ,不是路径。但是,` -- ` 强制` $myPath ` 只能作为路径解释,导致报错“不存在该路径”。
284284
285- ## 别名,alias 命令
286-
287- ` alias ` 命令用来为一个命令指定别名,这样更便于记忆。下面是` alias ` 的格式。
288-
289- ``` bash
290- alias NAME=DEFINITION
291- ```
292-
293- 上面命令中,` NAME ` 是别名的名称,` DEFINITION ` 是别名对应的原始命令。注意,等号两侧不能有空格,否则会报错。
294-
295- 一个常见的例子是为` grep ` 命令起一个` search ` 的别名。
296-
297- ``` bash
298- alias search=grep
299- ```
300-
301- ` alias ` 也可以用来为长命令指定一个更短的别名。下面是通过别名定义一个` today ` 的命令。
302-
303- ``` bash
304- $ alias today=' date +"%A, %B %-d, %Y"'
305- $ today
306- 星期一, 一月 6, 2020
307- ```
308-
309- 有时为了防止误删除文件,可以指定` rm ` 命令的别名。
310-
311- ``` bash
312- $ alias rm=' rm -i'
313- ```
314-
315- 上面命令指定` rm ` 命令是` rm -i ` ,每次删除文件之前,都会让用户确认。
316-
317- ` alias ` 定义的别名也可以接受参数,参数会直接传入原始命令。
318-
319- ``` bash
320- $ alias echo=' echo It says: '
321- $ echo hello world
322- It says: hello world
323- ```
324-
325- 上面例子中,别名定义了` echo ` 命令的前两个参数,等同于修改了` echo ` 命令的默认行为。
326-
327- 指定别名以后,就可以像使用其他命令一样使用别名。一般来说,都会把常用的别名写在` ~/.bashrc ` 的末尾。另外,只能为命令定义别名,为其他部分(比如很长的路径)定义别名是无效的。
328-
329- 直接调用` alias ` 命令,可以显示所有别名。
330-
331- ``` bash
332- $ alias
333- ```
334-
335- ` unalias ` 命令可以解除别名。
336-
337- ``` bash
338- $ unalias lt
339- ```
340-
341285## exit 命令
342286
343287` exit ` 命令用于终止当前脚本的执行,并向 Shell 返回一个退出值。
@@ -412,6 +356,112 @@ cd $some_directory && rm *
412356cd $some_directory || exit 1
413357```
414358
359+ ## source 命令
360+
361+ ` source ` 命令用于执行一个脚本,通常用于重新加载一个配置文件。
362+
363+ ``` bash
364+ $ source .bashrc
365+ ```
366+
367+ ` source ` 命令最大的特点是在当前 Shell 执行脚本,不像直接执行脚本时,会新建一个子 Shell。所以,` source ` 命令执行脚本时,不需要` export ` 变量。
368+
369+ ``` bash
370+ #! /bin/bash
371+ # test.sh
372+ echo $foo
373+ ```
374+
375+ 上面脚本输出` $foo ` 变量的值。
376+
377+ ``` bash
378+ # 当前 Shell 新建一个变量 foo
379+ $ foo=1
380+
381+ # 打印输出 1
382+ $ source test.sh
383+ 1
384+
385+ # 打印输出空字符串
386+ $ bash test.sh
387+ ```
388+
389+ 上面例子中,当前 Shell 的变量` foo ` 并没有` export ` ,所以直接执行无法读取,但是` source ` 执行可以读取。
390+
391+ ` source ` 命令的另一个用途,是在脚本内部加载外部库。
392+
393+ ``` bash
394+ #! /bin/bash
395+
396+ source ./lib.sh
397+
398+ function_from_lib
399+ ```
400+
401+ 上面脚本在内部使用` source ` 命令加载了一个外部库,然后就可以在脚本里面,使用这个外部库定义的函数。
402+
403+ ` source ` 有一个简写形式,可以使用一个点(` . ` )来表示。
404+
405+ ``` bash
406+ $ . .bashrc
407+ ```
408+
409+ ## 别名,alias 命令
410+
411+ ` alias ` 命令用来为一个命令指定别名,这样更便于记忆。下面是` alias ` 的格式。
412+
413+ ``` bash
414+ alias NAME=DEFINITION
415+ ```
416+
417+ 上面命令中,` NAME ` 是别名的名称,` DEFINITION ` 是别名对应的原始命令。注意,等号两侧不能有空格,否则会报错。
418+
419+ 一个常见的例子是为` grep ` 命令起一个` search ` 的别名。
420+
421+ ``` bash
422+ alias search=grep
423+ ```
424+
425+ ` alias ` 也可以用来为长命令指定一个更短的别名。下面是通过别名定义一个` today ` 的命令。
426+
427+ ``` bash
428+ $ alias today=' date +"%A, %B %-d, %Y"'
429+ $ today
430+ 星期一, 一月 6, 2020
431+ ```
432+
433+ 有时为了防止误删除文件,可以指定` rm ` 命令的别名。
434+
435+ ``` bash
436+ $ alias rm=' rm -i'
437+ ```
438+
439+ 上面命令指定` rm ` 命令是` rm -i ` ,每次删除文件之前,都会让用户确认。
440+
441+ ` alias ` 定义的别名也可以接受参数,参数会直接传入原始命令。
442+
443+ ``` bash
444+ $ alias echo=' echo It says: '
445+ $ echo hello world
446+ It says: hello world
447+ ```
448+
449+ 上面例子中,别名定义了` echo ` 命令的前两个参数,等同于修改了` echo ` 命令的默认行为。
450+
451+ 指定别名以后,就可以像使用其他命令一样使用别名。一般来说,都会把常用的别名写在` ~/.bashrc ` 的末尾。另外,只能为命令定义别名,为其他部分(比如很长的路径)定义别名是无效的。
452+
453+ 直接调用` alias ` 命令,可以显示所有别名。
454+
455+ ``` bash
456+ $ alias
457+ ```
458+
459+ ` unalias ` 命令可以解除别名。
460+
461+ ``` bash
462+ $ unalias lt
463+ ```
464+
415465## 参考链接
416466
417467- [ How to use getopts to parse a script options] ( https://linuxconfig.org/how-to-use-getopts-to-parse-a-script-options ) , Egidio Docile
0 commit comments