-
通用格式
[n]表示fd[n]{varname} > word表示fd[varname],存储的文件对象是wordfd[0]存储的文件对象是stdin;fd[1]存储的文件对象是stdout;fd[2]存储的文件对象是stderr;[n]>&[m]表示的fd[n]=fd[m].所以对于2>&1等价于fd[2]=fd[1]如上所示的对应:修改后
fd[2]==stdout;fd[1]==stdout,即输出错误输出到标准输出。2&>word表示>word 2>&1等价于fd[1]=word;fd[2]=fd[1]则
fd[2]==word,fd[1]==word,所以标准输出,标准错误都输出到文件word中。[n]&>-这种表示关闭fd[n]所对应的文件对象文件描述符。[n]&>digit-表示digit顶替n然后关掉n<>同时输入输出sprintf,最后文件啥样不可而知。
-
解析顺序
- 重定向在指令之前处理,所以你可以在一条指令的任意位置进行重定向。
>1 ls也是可以的ls >1 -l也是可以的
- 重定向的处理从左到右。
- 重定向在指令之前处理,所以你可以在一条指令的任意位置进行重定向。
-
处理文件描述符
-
使用
tcp进行通讯
-
-
每次重定向之后
0,1,2都会复原。 -
默认值
[n]<的n默认为0[n]>的n默认为1[n]<<的n默认为0[n]>>的n默认为1[n]<&的n默认为0[n]>&的n默认为1[n]>&digit-的n默认为0[n]<&digit-的n默认为1
-
细节上的问题
- 重定向后的
word进行了扩张之后,结果必须是一个单词,多个则会出错。 [n]>[|]word这种重定向,支持一种友好的方式,如果>|使用这个,且环境变量设置了set noclobber,且使用的是|,那么将会判断是否存在,如果存在则报错。这样就可以避免重要文件丢失。- 自带的
while( input() != key ).[n]<<[−]word here-document delimiter输入多行,输入的单词支持扩张,和普通shell类似,直到结束的
word出现。必须是单独的一行,一字不差的全部匹配。-表示去掉前置的空格。
<<<允许字符串直接重定向,这种也可以扩张。
- 重定向后的
-
特殊的文件
这些文件都是不存在的,是虚拟的。如果存在,则当成普通文件处理。所以谨慎使用。
/dev/fd/fd文件描述符/dev/stdin标准输入/dev/stdout标准输出/dev/stderr标准错误/dev/tcp/host/porthost可以使网址可以是IP,端口也需要合法,然后开启TCP连接并赋值。/dev/udp/host/port同上
来源:oschina
链接:https://my.oschina.net/u/3695598/blog/4259348

