$(<"dir/file") 在 bash 中是什么意思?

Ale*_*lex 8 shell bash io-redirection command-substitution

在我无法在这里发布的 bash 脚本中,我看到以下表达式:

$(<"dir/file")
Run Code Online (Sandbox Code Playgroud)

根据我的理解,表达式$(...)在内部计算命令(如使用反引号时),但是圆括号内使用的尖括号的作用是什么?

Gil*_*il' 14

<"dir/file"在重定向适用的命令期间,重定向打开文件以在标准输入上读取。当没有命令时,文件被打开以供读取(如果文件不存在或缺乏适当的权限,则会导致错误),但除此之外重定向无效。

ksh 增加了一个扩展,已经被 bash 和 ksh 采用。如果命令替换包含输入重定向而没有其他内容$(<"dir/file")(无命令、无其他重定向、无赋值等),则命令替换将被文件内容替换。因此$(<"dir/file")等效于$(cat "dir/file")(除了它不调用cat实用程序,因此它稍微快一点并且即使cat已被替换或不在命令搜索路径中也会做同样的事情)。

这在bash 手册中的“命令替换”下有提到。