内建命令是在当前bash下执行的,会对当前环境和subshell产生影响,而不是内建命令,bash会fork一个subshell来执行,为何要内建命令,由于bash的subshell不会对父shell产生影响,这样形成的结果是如cd命令,若是执行cd命令是在bash的subshell中执行,那么,并不会改变父shell的目录,这就不能完成切换目录的目的了。shell
你也能够使用enable命令打开或者关闭内建命令,内建命令总共有50多个,比较经常使用的有source . read mapfile和readarray(一个命令的两种写法,功能是将一个文本直接变成一个数组,每行做为数组的一个元素) echo printf jobs sleep fg bg disown(使一个jobs做业控制进程脱离jobs的控制,成为一个“野”进程) trap suspend exit exec logout wait数组
命令行参数的处理getopts,实现如-a、-b、-c n的功能,e:表示这个参数后面是有变量值的,后面的变量用$OPTARG获取。bash
#!/bin/bash while getopts "abc:de:f" arg do case $arg in a) echo "aaaaaaaaaaaaaaaaaaaaaa" ;; b) echo "bbbbbbbbbbbb" ;; c) echo "c:arg:$OPTARG" ;; d) echo "ddddddddddddddd" ;; e) echo "e:arg:$OPTARG" ;; f) echo "fffffffffffffffffffffff" ;; ?) echo "$arg:no this arguments!!!" esac done
还有如alias、unalias、cd、declare、typeset、dirs、enable、export、hash、history、popd、pushd、local、pwd、set、unset、shopt、ulimit、umask、eval、trap(信号命令)this
set是用来调试脚本的时候设置参数用的命令行
查看一个命令是否是内建命令,使用type command,能够直接看到返回的结果调试
type trap
trap 是 shell 内建
type find
ind 是 /usr/bin/find