簡單點理解,就是系統跟計算機硬件交互時使用的中間介質,它只是系統的一個工具。實際上,在shell和計算機硬件之間還有一層東西那就是系統內核了。打個比方,若是把計算機硬件比做一我的的軀體,而系統內核則是人的大腦,至於shell,把它比做人的五官彷佛更加貼切些。回到計算機上來,用戶直接面對的不是計算機硬件而是shell,用戶把指令告訴shell,而後shell再傳輸給系統內核,接着內核再去支配計算機硬件去執行各類操做。html
Unix中有兩種主要的shell類別:linux
linux的發佈版本之一——Redhat/CentOS——系統默認安裝的shell叫作bash,即Bourne Again Shell,它是sh(Bourne Shell)的加強版本。Bourn Shell 是最先行起來的一個shell,創始人叫Steven Bourne,爲了記念他因此叫作Bourn Shell,檢稱sh。那麼這個bash有什麼特色呢?shell
按行讀取命令bash
處理引用問題 雙引號內的字符將失去其原有意義,除了$
, "
和\
。 單引號內的字符將失去其原有意義,包括$
, "
和\
。ide
將輸入的一行字符串按照 ; 分割成多個命令。工具
處理特殊字符 {..}, <(..), < ..., <<< .., .. | ..
等特殊字符會被按照特殊的執行次序處理。 重定向符號會被從命令行中移除,因此在執行命令時... > log
, 2>&1
這些命令都是不會提交給內核處理命令的進程的。 其餘符號會被其對應的結果表達所替代,如{..}
命令:oop
$ echo {a..c}
a b c
複製代碼
$ echo $PWD
/z/ros
複製代碼
$ My Command /foo/bar ## This will execute the command named 'My' because it is the first word.
$ "My Command" /foo/bar ## This will execute the command named 'My Command' because the space inside the quotes has lost its special meaning allowing it to split words.
複製代碼
Tips: 在從Windows或MacOS將文件複製到Linux時,有些文件的文件名可能包含Linux不支持的特殊字符,如空格,#等,如文件名file 1127.txt
在Windows下是合法的,可是在Linux不合法,刪除這個文件的命令:學習
$ rm file 1127.txt // not work
$ rm "file 1127.txt" // work
複製代碼
Ref:ui