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.