Manipulação de argumentos na ordem especificada em / usr / bin / printf ou Bash printf

2

Você sabe que a função printf escrita em C permite fazer:

printf('%2$s %2$s %1%s %1%s', 'World', 'Hello');

Hello Hello World World

Mas em GNU Bash :

printf '%2$s %2$s %1%s %1%s' 'World' 'Hello'

bash: printf: $': invalid format character

Também para /usr/bin/printf :

/usr/bin/printf '%2$s %2$s %1%s %1%s' 'World' 'Hello'

/usr/bin/printf: %2$: invalid conversion specification

Como obter o comportamento C no Bash? Obrigado.

Editado:

Eu estava curioso sobre esse comportamento, não quero uma solução alternativa.

Editado:

Por exemplo pense na internacionalização do código fonte GNU Bash. Muito improvável sem esse recurso.

    
por Valerio Bozz 21.11.2016 / 15:55

2 respostas

1

Você não pode com bash . A especificação POSIX do utilitário printf também não a suporta. Você teria que reordenar os argumentos manualmente.

Os integrantes printf (ou print -f ) de ksh93 e zsh oferecem suporte a eles:

$ printf '%2$s%1$s\n' a b
ba

O GNU awk ou perl também é compatível, portanto, se você tiver algum desses instalados, em bash , você poderá redefinir printf como uma função como:

printf() { zsh -c 'printf "$@"' printf "$@"; }
    
por 26.11.2016 / 15:37
0

Isso funciona para mim:

set -- 'World' 'Hello'
printf '%s %s %s %s' "$2" "$2" "$1" "$1"
    
por 26.11.2016 / 13:40

Tags