Как printf с несколькими аргументами, разделенными пространством

У меня есть следующая функция printf :

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

Кто-нибудь может объяснить, что он производит и почему? Я ожидал иметь равное количество опций форматирования %s для каждой строки аргумента, но здесь у меня есть намного больше аргументов.

Формат повторяется столько раз, сколько необходимо для отображения всех аргументов. Если аргументов слишком мало, недостающие аргументы рассматриваются как пустые строки.

Примеры

Ниже приведен пример формата, который указывает два аргумента, но предоставляется только один:

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

Здесь тот же формат, на этот раз с одним слишком большим количеством аргументов:

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

Вот пример из вопроса, в котором формат ожидает четыре аргумента. Поскольку предусмотрено восемь аргументов, весь формат используется дважды:

 $ 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 

Документация

От человека bash:

Формат используется повторно для использования всех аргументов. Если в формате требуется больше аргументов, чем указано, спецификации дополнительного формата ведут себя так, как если бы было задано нулевое значение или нулевая строка. Возвращаемое значение равно нулю при успешном завершении, отличное от нуля при сбое.