Answers:
您缺少的是f
在exec
调用中只打开(和截断)一次文件。这两个echo
命令仅写入已打开的文件描述符。f
因此,该文件不会被任何一个echo
调用截断。
要将标准输出重定向到文件描述符,语法为>&n
,其中n
是一些小的正整数表示文件描述符(没有>>&n
重定向)。文件描述符必须已经与打开的文件相关联,此功能才能起作用。这是打开文件并将其与描述符关联的操作exec 3>f
,该操作exec 3>>f
会截断文件(不会截断文件,而会在追加模式下打开文件)。仅使用with >&3
不能打开文件,也不会截断它。
如果你做完了,那会不一样的
echo foo >f
echo bar >f
cat f
(每个都echo
在打开和截断f
),或更复杂的是,
exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f
(文件exec
在每个之前被打开和截断echo
)。