Lệnh printf '%.0s-' `seq 1 30`; echo
hoạ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`; echo
là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?
.
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
.