大括号扩展内的反引号

大括号扩展内的反引号

我试图列出 httpd 进程的文件,我尝试了以下方法:

ls -l /proc/{`pidof httpd | tr ' ' ','`}/
ls: cannot access /proc/{{28493,28492,28491,28490,28489,28488,28487,28486,28483}}/: No such file or directory

但如果我自己把 PID 放在括号内,它就会起作用:

ls -l /proc/{28493,28492,28491,28490,28489,28488,28487,28486,28483}/ | head -6
/proc/28483/:
total 0
dr-xr-xr-x 2 root root 0 Jan 30 11:18 attr
-rw-r--r-- 1 root root 0 Jan 30 11:18 autogroup
-r-------- 1 root root 0 Jan 30 11:18 auxv

我相信在第一种情况下,shell 将反引号输出视为单个参数,并且不扩展。所以我想知道,有没有办法让它看起来像一个要扩展的列表?我知道我可以通过 for 循环或许多其他方式来做到这一点。我特别有兴趣了解有关反引号和大括号扩展的更多信息,假设可以做到这一点。

答案1

in 中的求值顺序bash是先完成大括号扩展,然后才处理命令替换。

以下是 完成操作的顺序bash

  1. 支撑扩张,
  2. 波形符扩展,
  3. 参数和变量扩展,
  4. 命令替换,
  5. 算术展开式,
  6. 分词,
  7. 路径名扩展。

替代解决方案:

for pid in $( pidof httpd ); do ls -l /proc/"$pid"; done

相关内容