简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在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