在chinaunix看了网中人的shell 十三问,做了一些整理或者复制
原文地址:http://bbs.chinaunix.net/thread-218853-1-1.html
基础名词
1. 命令行(Command Line)
- 组成:Literal + Meta
Literal
就是一些字母单词,组成命令的
Meta
特殊保留字符,对于shell有特殊意义
重点
- meta有分command meta和shell meta
举例
- awk {print $0} 1.txt 这里{}会被解释成shell meta。
awk ‘{print $0}’ 1.txt 中的{}被解释成command meta
常见Meta
=: 设定变量。
$: 作变量或运算替换(请不要与 shell prompt 搞混了)。
>: 重导向 stdout。
<: 重导向 stdin。
|: 命令管线。
&: 重导向 file descriptor ,或将命令置于背境执行。
( ): 将其内的命令置于 nested subshell 执行,或用于运算或命令替换。
{ }: 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。
; : 在前一个命令结束时,而忽略其返回值,继续执行下一个命令。
&& : 在前一个命令结束时,若返回值为 true,继续执行下一个命令。
|| : 在前一个命令结束时,若返回值为 false,继续执行下一个命令。
!: 执行 history 列表中的命令
2. IFS(Internal Field Seperator)
- 产生:空格键(Space),表格键(Tab),回车键(Enter)
- 功能:拆解command line的每个单词
3. CR(Carriage Return)
- 产生:回车键(Enter)
- 功能:告诉shell可以执行命令行了
单引号和双引号的区别
单引号(hard quote)
所有meta特殊字符会被关闭特性
双引号(soft quote)
大部分meta特殊字符会被关闭特性,但有些被保留,如$
反斜线(escape)
只有紧接在反斜线\后的meta特性被关闭
总结
- Shell通过IFS对命令行中的字符串拆分执行
- IFS和CR都算是meta吧。。。。猜测
- Shell执行命令,通过IFS进行分割,是命令就执行