这是字面意思,{fd}
不是占位符。我有一个脚本可以执行此操作,并且不引用任何内容,也不引用其他任何地方的 {fd} 。这是有效的 bash 吗?
exec {fd}</dev/watchdog
答案1
而不必选择一个文件描述符并希望它可用:
exec 4< /dev/watchdog # Was 4 in use? Who knows?
此表示法要求 shell 选择当前未使用的文件描述符,打开文件以在该描述符上读取,并将数字分配给给定变量 ( fd
)。
$ exec {fd}< /dev/watchdog
$ echo $fd
10
答案2
表格:
{var}<filename
使 shell 打开文件filename
进行读取并将文件描述符编号存储在变量 中var
。和 重定向运算符之间不允许有空格{var}
,并且文件描述符编号将大于或等于10
。
该功能最初来自ksh
(2006 年的 ksh93r 版本),bash
后来bash-4.1-alpha
从 2010 年开始复制它。也比2007 年zsh
更早地进行了更改。bash
zsh 4.3.4
答案3
Bash 手册部分对此进行了解释重定向。
每个重定向前面可能带有文件描述符编号,但前面可能带有以下形式的单词 {变量名}。在这种情况下,对于除
>&-
和 之外的每个重定向运算符<&-
,shell 都会分配一个大于 10 的文件描述符并将其分配给 {变量名}。如果>&-
或<&-
前面有 {变量名}, 的价值变量名定义要关闭的文件描述符。