<$( )> 有什么作用

Mel*_*est 18 shell bash

我在这个问题中看到了语法:Birth is empty on ext4

sudo debugfs -R "stat <$(stat -c %i /home/user/path/to/file)>" /dev/sda5
Run Code Online (Sandbox Code Playgroud)

我知道命令替换$()``.

我有点模糊地知道<()>()语法。

但我从未见过<$()>

那有什么作用呢?

Ark*_*zyk 35

<$()>对于从文件(<部分)读取的命令来说,这是有效的 bash 语法,其中文件名是使用命令替换($()部分)创建的,这些命令替换(部分)将输出重定向到某个其他文件(> 部分)。例子:

$ echo text > FILE
$ wc < "$(echo FILE)" > WC_OUT
$ cat WC_OUT
1 1 5
Run Code Online (Sandbox Code Playgroud)

但是,在您链接到的答案<$()>中,参数用于debugfs. 在man debugfs这样说的:

统计文件规范

显示 inode filespec 的 inode 结构的内容。

和:

filespec 参数可以用两种形式指定。第一种形式是用尖括号括起来的 inode 编号,例如 <2>

在这种情况下:

sudo debugfs -R "stat <$(stat -c %i FILE)>" /dev/sda5
Run Code Online (Sandbox Code Playgroud)

将被 shell 扩展为等价于:

sudo debugfs -R "stat <4476834>" /dev/sda5
Run Code Online (Sandbox Code Playgroud)

这是一个有效的debugfs命令。检查它echo

$ echo sudo debugfs -R "stat <$(stat -c %i FILE)>" /dev/sda5
sudo debugfs -R stat <4476834> /dev/sda5
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,`debugfs` 不是 Bash 命令,也就是说它不是 Bash 内置命令。它是一个可以在所有 shell 中运行的外部程序,即使在那些没有实现 `&lt;` 和 `&gt;` 的以及在多个操作系统上也是如此。 (11认同)