Bash (та інші оболонки Unix), 32 (33) байти
Перша та друга спроба:
case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L # non-portable
Завдяки Деннісу, коротша версія:
od<<<a|grep -q 5&&echo L||echo B # non-portable
echo|od|grep -q 5&&echo B||echo L # portable
echoУтиліта виводить символ нового рядка, з шістнадцятковим значенням 0A, і ніякого іншого висновком. Бо <<<aвоно є 61 0A.
odУтиліта, за замовчуванням, інтерпретує введення як два байти слово, доповнені нулі , якщо кількість байт непарній, і перетворює в вісімкову системі . Це призводить до того, що вихід ехо буде інтерпред як 0A 00, який перетворюється на 005000велике-ендіанське або 000012мало-ендіанське. 61 0Aстає 005141в мало-ендіанський і 060412в великий-ендіанський. Повний вихід ода також включає в себе адресу і розмір даних означає , що ми не можемо використовувати 0, 1або 2для випробування.
Команда є чітко визначеною для викриття системи. Зі стандартного :
Порядок байтів, що використовується при інтерпретації числових значень, визначається реалізацією, але повинен відповідати порядку, в якому константа відповідного типу зберігається в пам'яті в системі.
Нотатки про сумісність
Я не впевнений, якщо введення echo|odзворотних цитат без подвійних лапок навколо них [що призводить до трисловного аргументу case] підтримується у всіх системах. Я не впевнений, чи всі системи підтримують сценарії оболонки без закінчення нового рядка. Я здебільшого впевнений, але не на 100% від поведінки од додавання байта для прокладки у великих ендіанських системах. При необхідності echo aможна використовувати для портативних версій. Усі сценарії працюють у bash, ksh та zsh, а портативні - у dash.