#!/bin/bash
echo 123456789 > out.txt
exec 3<> out.txt
read -n 4 <&3
echo -n 5 >&3
exec 3>&-
面试笔试时,被问到脚本末尾out.txt的内容。我确实在事后运行了脚本,它给了我123456789
.但我不知道脚本中发生了什么,尤其是 exec 语句的部分。我查阅了手册页和谷歌搜索结果,exec
但找不到任何关于该3<>
位的信息。有精通 shell 脚本的人可以解释一下这里发生了什么吗?
答案1
echo 123456789 > out.txt
将字符串写入文件123456789
中。out.txt
该exec 3<>out.txt
构造打开文件out.txt
进行读写<
,>
并将其附加到文件描述符#3。
read -n 4 <&3
读取 4 个字符。
echo -n 5 >&3
写入 5(将 5 替换为 5)。
exec 3>&-
关闭文件描述符#3。
导致
cat out.txt
123456789
exec
关于int 的部分bash(1)
指出:
exec [-cl] [-a name] [command [arguments]]
如果command
指定,它将替换外壳。 [...]如果command
未指定,任何重定向都会在当前 shell 中生效 [...]。