Hallo pl,
nur, das halt alle String-Platzhalter %s heißen.
Die Reihenfolge lässt sich aber ebenso wie in PHP beeinflussen.
Das Problem ist, dass alle Platzhalter %s heißen. D.h., alle Platzhalter haben denselben Namen. Von daher müssen die Daten/Werte für Platzhalter in derselben Reihenfolge geliefert werden wie es das Template vorgibt.
Nein, auch in Perl geht
printf '%2$s %1$s', "Welt", "Hallo"; # Hallo Welt
Das ist aber nicht die eigentliche Zweckbestimmung dieser Schablone. So stehts in der Doku:
(minimum) width
Arguments are usually formatted to be only as wide as
required to display the given value. You can override the
width by putting a number here, or get the width from the
next argument (with "*") or from a specified argument (e.g.,
with "*2$"):
printf "<%s>", "a"; # prints "<a>"
printf "<%6s>", "a"; # prints "< a>"
printf "<%*s>", 6, "a"; # prints "< a>"
printf "<%*2$s>", "a", 6; # prints "< a>"
printf "<%2s>", "long"; # prints "<long>" (does not truncate)
If a field width obtained through "*" is negative, it has
the same effect as the "-" flag: left-justification.
So wie Du das verwendest ist es nicht dokumentiert.