Bash(および他のUNIXシェル)、32(33)バイト
1回目と2回目の試行:
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
ユーティリティ16進値と、改行を出力し0A
、かつない他の出力。以下のために<<<a
それがあります61 0A
。
od
ユーティリティは、バイトの数が奇数の場合、デフォルトでは、ゼロパディング2バイト語として入力を解釈し、進に変換します。これにより、エコーの出力はとして解釈0A 00
され005000
、ビッグエンディアンまたはリトルエンディアンに変換され000012
ます。61 0A
となり005141
リトルエンディアンにし、060412
ビッグエンディアンで。ODのフル出力はまた、我々が使用することはできません意味のアドレスとサイズのデータを含む0
、1
または2
テストのために。
このコマンドは、システムのエンディアンを公開するように明確に定義されています。標準から:
数値を解釈するときに使用されるバイト順序は実装で定義されますが、対応するタイプの定数がシステムのメモリに格納される順序に対応しなければなりません。
互換性に関する注意
echo|od
二重引用符なしでバッククォートを入れるかどうか(結果として3ワードの引数になるcase
)がすべてのシステムでサポートされているかどうかはわかりません。すべてのシステムが終了改行なしでシェルスクリプトをサポートするかどうかはわかりません。ビッグエンディアンシステムにパディングバイトを追加した場合のodの動作は100%ではありませんが、ほぼ確実です。必要に応じecho a
て、ポータブルバージョンに使用できます。すべてのスクリプトはbash、ksh、およびzshで動作し、ポータブルなスクリプトはdashで動作します。