1. 通配符wildcard
通配符是由shell处理的, 它只会出现在 命令的“参数”里。当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。
通配符 实际上就是一种shell实现的路径扩展功能。在 通配符被处理后, shell会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。
shell常见通配符:
字符 | 说明 | 举例 |
---|---|---|
* | 匹配0 或多个字符 | a*b match: a1bsb, axyzb, a012b, ab…; NoMatch: a,b,cb,1b… |
? | 匹配任意一个字符 | a?b match: aab, abb, acb, a0b…; NotMatch: accb, 123b… |
[list] | 匹配 list 中的任意一个字符 | a[xyz]b match: axb, ayb, azb; NotMatch: other(axyb,axyzb,xyb…) |
[!list] | ! 表示反选, 匹配 除list 中的任意一个字符 | a[!0-9]b Match: axb,aab,a-b…; NotMatch: a0b, axxb… |
[c1-c2] | - 表示范围, 像[0-9] [a-z] | a[0-2]b Match: a0b,a1b,a2b; NotMatch: other(axxxb,a3b…) |
{string1,string2,…} | 匹配 sring1,string2…etc.中的任意字符串 | a{abc,xyz,123}b Match: aabcb,axyzb,a123b; NotMatch: other |
2. 元字符Meta
字符 | 说明 |
---|---|
IFS | 由 或 或 |
CR | 由 |
= | 设定变量。 |
$ | 作变量或运算替换(请不要与 shell prompt 搞混了)。 |
> | 重导向 stdout。 * |
< | 重导向 stdin。 * |
& | 重导向 file descriptor ,或将命令置于背境执行。 * |
( ) | 将其内的命令置于 nested subshell 执行,或用于运算或命令替换。 * |
{ } | 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。 |
; | 在前一个命令结束时,而忽略其返回值,继续执行下一个命令。 * |
&& | 在前一个命令结束时,若返回值为 true,继续执行下一个命令。 * |
! | 执行 history 列表中的命令。* |
3. 转移符
作用:将特殊字符变为普通字符
字符 说明 ‘(单引号) 硬转义,其内部所有的shell 元字符、通配符都会被关掉。 “(双引号) 软转义,其内部只允许出现特定的shell元字符:$ 参数代换 ` 命令代替 (反斜杠) 转义,去除其后紧跟的元字符或通配符的特殊意义