Onde %n$sé como %s, exceto que usa o enésimo argumento em vez do próximo como o printf()¹ da GNU libc (mas não no printfutilitário GNU autônomo nem no printfbuilt-in do shell GNU (bash) ainda).
Observe que, embora printf '%s%1$s' one twotambém funcione em zsh, não funciona em todas printfas implementações que suportam %n$xe o POSIX tornará o comportamento não especificado se as diretivas com e sem n$forem misturadas.
Outra opção é usar o operador de compactação de matriz, por exemplo, em uma função anônima:
(){ printf %s%s ${argv:^argv}; } one two
Onde com zip $argvcom ele mesmo resultando em oneonetwotwoser passado para printf. Como de costume, altere para "${(@)argv:^argv}"ou "${@:^argv}"para preservar os elementos vazios em qualquer.
Essa %$nXsintaxe printf()é POSIX, possivelmente originada em SVR4 (estava em SVR4, não em SVR3), provavelmente proveniente de nl_printf()uso anterior para localização de mensagens em que a ordem dos elementos em uma mensagem pode mudar de um idioma para outro.
Em zsh:
Onde
%n$s
é como%s
, exceto que usa o enésimo argumento em vez do próximo como oprintf()
¹ da GNU libc (mas não noprintf
utilitário GNU autônomo nem noprintf
built-in do shell GNU (bash) ainda).Isso foi adicionado ao zsh em 2001 e também está disponível em algumas outras
printf
implementações embora com algumas variações e será especificado na próxima versão do padrão POSIXObserve que, embora
printf '%s%1$s' one two
também funcione em zsh, não funciona em todasprintf
as implementações que suportam%n$x
e o POSIX tornará o comportamento não especificado se as diretivas com e semn$
forem misturadas.Outra opção é usar o operador de compactação de matriz, por exemplo, em uma função anônima:
Onde com zip
$argv
com ele mesmo resultando emone
one
two
two
ser passado paraprintf
. Como de costume, altere para"${(@)argv:^argv}"
ou"${@:^argv}"
para preservar os elementos vazios em qualquer.Essa
%$nX
sintaxeprintf()
é POSIX, possivelmente originada em SVR4 (estava em SVR4, não em SVR3), provavelmente proveniente denl_printf()
uso anterior para localização de mensagens em que a ordem dos elementos em uma mensagem pode mudar de um idioma para outro.