今天看代码,偶然间看到一种有意思的写法,在此记录一下,但是并不建议脚本中使用,不好理解!
exec 9<a.txt 以只读方式打开a.txt,文件描述符为9
exec 9>a.txt 以只写方式打开a.txt,文件描述符为9
exec 9>>a.txt 以只写(追加)方式打开a.txt,文件描述符为9
exec 9<>a.txt 以读写方式打开a.txt,文件描述符为9(这项我目前并不理解,实验中和我的理解存在着偏差,也没找到太多资料)
exec 9<&- 关闭文件描述符9
<
#!/bin/sh echo "This is a new file" > a.txt exec 9<a.txt cat <&9
结果:
[root@VM-16-15-centos ~]# sh run.sh This is a new file
>
#!/bin/sh echo "This is a new file" > a.txt exec 9>a.txt echo "Hello Man">&9 cat a.txt
结果:
[root@VM-16-15-centos ~]# sh run.sh Hello Man
>>
#!/bin/sh echo "This is a new file" > a.txt exec 9>>./a.txt echo "Hello Man">&9 cat a.txt
结果:
[root@VM-16-15-centos ~]# sh run.sh This is a new file Hello Man
诡异的<>
#!/bin/sh echo "This is a new file" > a.txt exec 9<>./a.txt echo "Hello Man">&9 cat <&9 echo "--------------关闭文件描述---------------" exec 9<&- echo "Hello Man2">&9 cat <&9
理论上结果:
Hello Man --------------关闭文件描述--------------- run.sh: line 8: 9: Bad file descriptor run.sh: line 9: 9: Bad file descriptor
可是实际结果是:
[root@VM-16-15-centos ~]# sh run.sh new file --------------关闭文件描述--------------- run.sh: line 8: 9: Bad file descriptor run.sh: line 9: 9: Bad file descriptor [root@VM-16-15-centos ~]# cat a.txt Hello Man new file
哈哈哈哈,诡异
再试一下
#!/bin/sh echo "AIdddddddddddddddddddddddddddddddIA" > a.txt exec 9<>./a.txt cat <&9 echo "Hello Man">&9 cat <&9 echo "--------------关闭文件描述---------------" exec 9<&- echo "Hello Man2">&9 cat <&9
理论结果:
AIdddddddddddddddddddddddddddddddIA Hello Man --------------关闭文件描述--------------- run.sh: line 8: 9: Bad file descriptor run.sh: line 9: 9: Bad file descriptor
实际结果:
[root@VM-16-15-centos ~]# sh run.sh AIdddddddddddddddddddddddddddddddIA --------------关闭文件描述--------------- run.sh: line 9: 9: Bad file descriptor run.sh: line 10: 9: Bad file descriptor [root@VM-16-15-centos ~]# cat a.txt AIdddddddddddddddddddddddddddddddIA Hello Man
可能是我对<>的理解有问题,但是我搜了好久也没有搜到些有用的资料,先写到这里吧!明白了再更正!
发表评论