內建命令是在當前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