Bash (dan shell unix lainnya), 32 (33) byte
Upaya pertama dan kedua:
case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L # non-portable
Berkat Dennis, versi yang lebih pendek:
od<<<a|grep -q 5&&echo L||echo B # non-portable
echo|od|grep -q 5&&echo B||echo L # portable
The echo
utilitas output baris baru, dengan nilai hex 0A
, dan tidak ada output lainnya. Untuk <<<a
itu 61 0A
.
The od
utilitas, secara default, menafsirkan masukan sebagai kata-kata dua-byte, nol-empuk jika jumlah byte adalah aneh, dan bertobat untuk oktal. Ini menghasilkan output dari gema yang ditafsirkan sebagai 0A 00
, yang dikonversi menjadi 005000
big-endian atau 000012
little-endian. 61 0A
menjadi 005141
little-endian dan 060412
big-endian. Output penuh od juga termasuk alamat dan data ukuran yang berarti kita tidak bisa menggunakan 0
, 1
atau 2
untuk ujian.
Perintah didefinisikan dengan baik untuk mengekspos endianness sistem. Dari standar :
Urutan byte yang digunakan ketika menginterpretasikan nilai-nilai numerik adalah implementasi-didefinisikan, tetapi harus sesuai dengan urutan di mana konstanta dari tipe yang sesuai disimpan dalam memori pada sistem.
Catatan kompatibilitas
Saya tidak yakin apakah menempatkan echo|od
backquote tanpa tanda kutip ganda di sekitarnya [yang menghasilkan argumen tiga kata untuk case
] didukung pada semua sistem. Saya tidak yakin apakah semua sistem mendukung skrip shell tanpa mengakhiri baris baru. Saya sebagian besar pasti tetapi tidak 100% dari perilaku od dengan menambahkan byte padding pada sistem big-endian. Jika perlu, echo a
bisa digunakan untuk versi portable. Semua skrip bekerja dalam bash, ksh, dan zsh, dan yang portabel bekerja di dash.