Como o printf com vários argumentos separados pelo trabalho espacial

3

Eu tenho a seguinte função printf :

$ printf '%s %s %s\t%s\n' 100644 blob 8e1e f1.txt 100644 blob 9de7 f2.txt | git mktree

Alguém por favor pode explicar o que produz e por quê? Eu esperava ter um número igual de opções de formatação %s para cada string de argumento, mas tenho muito mais strings de argumentos aqui.

    
por Max Koretskyi aka Wizard 19.08.2017 / 07:10

1 resposta

8

O formato é reutilizado quantas vezes forem necessárias para exibir todos os argumentos. Se houver poucos argumentos, os argumentos ausentes serão tratados como sequências vazias.

Exemplos

Aqui está um exemplo de um formato que especifica dois argumentos, mas apenas um é fornecido:

$ printf '%s ; %s ;\n' a
a ;  ;

Aqui está o mesmo formato, desta vez fornecido com muitos argumentos:

$ printf '%s ; %s ;\n' a b c
a ; b ;
c ;  ;

Aqui está o exemplo da pergunta em que o formato espera quatro argumentos. Como oito argumentos são fornecidos, o formato inteiro é usado duas vezes:

$ printf '%s %s %s\t%s\n' 100644 blob 8e1e f1.txt 100644 blob 9de7 f2.txt
100644 blob 8e1e        f1.txt
100644 blob 9de7        f2.txt

Documentação

Do homem bash:

The format is reused as necessary to consume all of the arguments. If the format requires more arguments than are supplied, the extra format specifications behave as if a zero value or null string, as appropriate, had been supplied. The return value is zero on success, non-zero on failure.

    
por 19.08.2017 / 07:55

Tags