- 论坛徽章:
- 0
|
1.4 shell wildcard通配符
常用的*?就不细说了。
[...][匹配括号内的任何字符
# rm [12356].txt 删除1.txt, 2.txt, 3.txt, 5.txt, 6.txt文件
# rm [1-35-6].txt 同上
# ls [a-z].txt 列出所有的a.txt, ... , z.txt,等
书上说通配符只能用于匹配已存在的文件,而不能用来创建文件。
# mv ch.* chapter.*
这样是不执行的。
但是在我的系统上
# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt
# mv *.txt *.tx
mv: when moving multiple files, last argument must be a directory
1.5 I/O重定向(redirection)和管道(pipe)
I/O重定向指 > , >> , < , <<
重定向到一个文件时,会判断一个文件是否存在,不存在则创建它,然后再执行命令,写进去。
# ls
1.txt 2.txt
# ls >ls.out
# cat ls.out
1.txt
2.txt
ls.out
由于先判断文件是否存在的关系,ls.out本身也包括在里面了。
类似的情况,在管道中
# ps -ef|grep named
有时候你会grep到“grep named”这个命令。
# set -x
# ps -ef|grep named
+ grep named
+ ps -ef
root 4336 2148 0 18:47 pts/0 00:00:00 grep named
# ps -ef|grep named
+ ps -ef
+ grep named
这是因为管道的程序是“同时”运行的,而不是顺序执行。
管道中的程序是交互式的,由内核对其进行调度和同步处理,以使他们全部运行。
1.6 shell解释的情况
# sort<temp
# sort temp
这两者执行的结果是一样,但实质是有区别的。
sort<temp,是由shell解释<temp,然后作为标准输入传递给sort。
sort temp,是sort把temp看作一个变量,sort读入temp并排序。
# rm [12356].txt
同样,这些通配符也都是由shell来解释。而不是这些命令程序
首先shell解释[12356].txt 是1.txt , 2.txt ...
然后rm再读取1.txt , 2.txt ...
因此对于程序来说,通配符,重定向和管道都是透明的。
[ 本帖最后由 tanyear 于 2005-12-29 23:40 编辑 ] |
|