一直没搞懂 &> 和 <& 是表示什么意思。 今天自己总结一下,希望自己能理解它的真正含义。

重定向标准输入输出,切记 “1” 和 “>”之间没有空格

$ echo "hello world" > file
$ cat < file
hello world
$ echo "hello world" > file
hello world
$ cat < file
$

&表示什么意思

重定向可以用i>&j命令,表示把文件标识符i重新定向到j,你可以把"&"理解为"取地址"

$ echo "hello world 1>&2" >& > file
$ cat < file
hello world >&
$

系统为每一个打开的文件指定一个文件标识符以便系统对文件进行跟踪,0对应stdin,1对应stdout, 2对应stderr。用复杂的例子说明一下更高级的用法:

$ echo 123456789 > file        把字符串写到文件filename中

$ cat file
123456789
$ exec 3<>file                 把文件file打开,并指定文件标识符为3

$ read -n 4 <&3                从文件中读4个字符,句柄已经指到第四个字符末尾

$ echo -n . >&3                在第5个字符处写一个点,覆盖第5个字符,-n表示不换行

$ exec 3>&-                    关闭文件标识符3

$ cat file
1234.6789
~$

现在cat filename文件的结果就成了 0123.56789

命令j<>filename表示把文件打开,并指明文件标识符为j 
"&-"表示关闭文件标识符

有关关闭文件标识符的操作请参考下面

n<&-        关闭输入文件标识符n
<&-或<&- 关闭标准输入stdin
n>&- 关闭输出文件标识符n
>&-或>&- 关闭标准输出stdout
05-11 19:40