Wie führe ich eine Befehlsersetzung vor der Klammernerweiterung durch?

Wie führe ich eine Befehlsersetzung vor der Klammernerweiterung durch?

Ich möchte vor der Klammernerweiterung eine Befehlsersetzung durchführen, konnte dies aber nicht:

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

Wie kann ich es tun?

Antwort1

Sie müssen lediglich das evalintegrierte Shell-Feature verwenden:

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

Dabei evalwerden die ihm übergebenen Argumente übernommen:

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

und verkettet sie zu einem einzigen Befehl:

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

welches dann von der Shell gelesen und ausgeführt wird.

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

Antwort2

Hast du es versucht

ls $(seq -f %.0f.pdf 13 20 )
  • -fgibt den Formatstring aus
  • .0ffür 0 Dezimalstellen Float
  • .pdfoffensichtlich

(und Sie kennen die $()-Syntax)

verwandte Informationen