如何在大括号扩展之前执行命令替换?

如何在大括号扩展之前执行命令替换?

我想在大括号扩展之前执行命令替换,但不能:

$ ls {$(seq -s , 13 20)}.pdf
ls: cannot access {13,14,15,16,17,18,19,20}.pdf: No such file or directory

我该怎么做?

答案1

您只需要使用eval内置的 shell:

$ eval ls {$(seq -s , 13 20)}.pdf

eval传递给它的参数在哪里:

ls {$(seq -s , 13 20)}.pdf

并将它们连接成一个命令:

ls {13,14,15,16,17,18,19,20}.pdf

然后由 shell 读取并执行。

$ eval ls {$(seq -s , 13 20)}.pdf
13.pdf  14.pdf  15.pdf  16.pdf  17.pdf  18.pdf  19.pdf  20.pdf

答案2

你有没有尝试过

ls $(seq -f %.0f.pdf 13 20 )
  • -f给出格式字符串
  • .0f对于 0 位小数浮点数
  • .pdf明显的

(并且您了解 $( ) 语法)

相关内容