shell 在执行输入的字符串命令之前,会做一些预处理,比如通配符替换。具体例子来说,
如果当前目录中有1.jpg
,2.jpg
,3.jpg
,那么命令
ls *.jpg
被转换成
ls 1.jpg 2.jpg 3.jpg
? (question mark)通配符
匹配任意一个字符。比如hd?
可以表示hdQ
或者hd4
。
* (asterisk)通配符
匹配任意零个或者多个字符。比如hd*
可以表示hd
或者hd4Q
或者hdblabla
等等。
[ ] (square brackets)通配符
[]
中可以指定范围,然后匹配其中一个字符。
m[a,o,u]m
匹配mam
或者mom
或者mum
。
m[a-d]m
匹配mam
或者mbm
或者mcm
、mdm
。
[!]通配符
!
表示反义,比如m[!a-d]m
匹配除mam
或者mbm
或者mcm
、mdm
之外的m*m
。
{ } (curly brackets)通配符
在{ }
中可以指定多个项,每一个项用,
号分割,每一项又可以是通配符。
{*.doc,*.pdf}
可以表示foo.doc
或者bar.pdf
。
{1..5}
既{1,2,3,4,5}
,表示1 2 3 4 5
echo {1..5}
1 2 3 4 5