Đây có phải là lỗi mà zsh in chuỗi đầy đủ với printf '% .s' không?


7

Lệnh printf '%.0s-' `seq 1 30`; echohoạt động tốt trong tất cả các shell được kiểm tra:

/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       : ------------------------------

Ngoại trừ jsh (vỏ gia truyền), y2sh Còn một vỏ khác, phiên bản 2.39 và lksh (vỏ Legacy Korn), tất cả các loại khác đều thực hiện một bản dựng sẵn:

/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

Nhưng dòng này: printf '%.s-' `seq 1 30`; echolàm cho (chỉ) zsh thất bại:

/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-

Thông số POSIX nói rằng:

Độ chính xác sẽ có dạng một ('.') Theo sau là một chuỗi chữ số thập phân; một chuỗi chữ số null được coi là số không.

Ngay cả khi các sđặc điểm kỹ thuật định dạng (trong cùng một liên kết):

Nếu độ chính xác được bỏ qua khỏi đối số, nó sẽ được coi là vô hạn, do đó tất cả các byte cho đến cuối chuỗi sẽ được ghi.

Có thể hợp lý khi lập luận rằng một chữ số chính xác "bị thiếu" không bị "bỏ qua" nhưng đã được đặt thành "null" và do đó nên được hiểu là 0.

Nó sẽ theo zsh có một lỗi ở đây.

Đó có phải là lời giải thích chính xác?

shell  zsh  printf 

3
Tôi muốn nói "lỗi". "Chính xác" đề cập đến cả .chuỗi chữ số và tùy chọn; một độ chính xác bị bỏ qua trông giống như %s, không %.s.
chepner

Câu trả lời:


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.