Bash (và các shell unix khác), 32 (33) byte
Nỗ lực thứ nhất và thứ hai:
case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L # non-portable
Nhờ Dennis, phiên bản ngắn hơn:
od<<<a|grep -q 5&&echo L||echo B # non-portable
echo|od|grep -q 5&&echo B||echo L # portable
Các echo
tiện ích kết quả đầu ra một dòng mới, với giá trị hex 0A
, và không có đầu ra khác. Đối với <<<a
nó là 61 0A
.
Theo od
mặc định, tiện ích diễn giải đầu vào dưới dạng các từ hai byte, không đệm nếu số byte là số lẻ và chuyển đổi thành bát phân. Điều này dẫn đến kết quả đầu ra của tiếng vang được hiểu là 0A 00
, được chuyển đổi thành âm 005000
cuối lớn hoặc 000012
cuối nhỏ. 61 0A
trở thành 005141
ít endian và 060412
lớn endian. Sản lượng đầy od cũng bao gồm địa chỉ và kích thước dữ liệu có nghĩa là chúng ta không thể sử dụng 0
, 1
hoặc 2
cho kỳ thi này.
Lệnh được xác định rõ để hiển thị độ bền của hệ thống. Từ tiêu chuẩn :
Thứ tự byte được sử dụng khi diễn giải các giá trị số được xác định theo thực hiện, nhưng sẽ tương ứng với thứ tự trong đó một hằng số của loại tương ứng được lưu trữ trong bộ nhớ trên hệ thống.
Ghi chú tương thích
Tôi không chắc chắn nếu đưa echo|od
vào các backquote không có dấu ngoặc kép xung quanh chúng [dẫn đến một đối số ba từ case
] được hỗ trợ trên tất cả các hệ thống. Tôi không chắc chắn nếu tất cả các hệ thống hỗ trợ tập lệnh shell mà không có dòng mới kết thúc. Tôi chủ yếu là chắc chắn nhưng không phải là 100% hành vi của od với việc thêm byte đệm vào các hệ thống lớn. Nếu cần, echo a
có thể được sử dụng cho các phiên bản di động. Tất cả các tập lệnh hoạt động trong bash, ksh và zsh, và các tập lệnh di động hoạt động trong dấu gạch ngang.