Это ошибка, которую zsh печатает полную строку с printf '% .s'?

Команда printf '%.0s-' `seq 1 30`; echo printf '%.0s-' `seq 1 30`; echo работает отлично во всех проверенных оболочках:

 /bin/jsh : ------------------------------ /bin/attsh : ------------------------------ /bin/y2sh : ------------------------------ /bin/ash : ------------------------------ /bin/dash : ------------------------------ /bin/b203sh : ------------------------------ /bin/b43sh : ------------------------------ /bin/b44sh : ------------------------------ /bin/bash : ------------------------------ /bin/ksh : ------------------------------ /bin/ksh93 : ------------------------------ /bin/lksh : ------------------------------ /bin/mksh : ------------------------------ /bin/zsh : ------------------------------ /bin/zsh4 : ------------------------------ 

За исключением jsh (оболочка реликвии), y2sh Еще одна оболочка, версия 2.39 и lksh (оболочка Legacy Korn), все остальные реализуют встроенную печать:

 /bin/attsh : printf is a shell builtin /bin/ash : printf is a shell builtin /bin/dash : printf is a shell builtin /bin/b203sh : printf is a shell builtin /bin/b43sh : printf is a shell builtin /bin/b44sh : printf is a shell builtin /bin/bash : printf is a shell builtin /bin/ksh : printf is a shell builtin /bin/ksh93 : printf is a shell builtin /bin/mksh : printf is a shell builtin /bin/zsh : printf is a shell builtin /bin/zsh4 : printf is a shell builtin 

Но эта строка: printf '%.s-' `seq 1 30`; echo printf '%.s-' `seq 1 30`; echo делает (только) ошибка zsh:

 /bin/attsh : ------------------------------ /bin/ash : ------------------------------ /bin/dash : ------------------------------ /bin/b203sh : ------------------------------ /bin/b43sh : ------------------------------ /bin/b44sh : ------------------------------ /bin/bash : ------------------------------ /bin/ksh : ------------------------------ /bin/ksh93 : ------------------------------ /bin/mksh : ------------------------------ /bin/zsh : 1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30- /bin/zsh4 : 1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25-26-27-28-29-30- 

Спецификация POSIX гласит, что:

Точность должна иметь вид ('.'), За которым следует десятичная цифра; строка нулевой цифры обрабатывается как ноль.

Даже если спецификация формата s заявляет (в той же ссылке):

Если точность не указана в аргументе, она должна быть бесконечной, поэтому все байты до конца строки должны быть записаны.

Было бы разумно утверждать, что «недостающая» цифра точности не «опущена», а была установлена ​​на «нуль» и поэтому должна интерпретироваться как ноль.

Из этого следует, что у zsh есть ошибка.

Это правильное объяснение?

Да, но похоже, что он был раздавлен (38306). Как отмечено здесь: http://www.zsh.org/mla/workers/2016/msg00841.html

Источник: https://github.com/zsh-users/zsh/commit/e1c745a0dca56afb9cfcace1ef59449152290188