Bash (및 기타 유닉스 쉘), 32 (33) 바이트
첫 번째와 두 번째 시도 :
case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L # non-portable
더 짧은 버전 인 Dennis 덕분에 :
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 바이트 단어로 해석하고 바이트 수가 홀수이면 0으로 채워지고 8 진수로 변환됩니다. 그 결과 에코 출력이로 해석되어 빅 엔디안 또는 리틀 엔디안으로 0A 00
변환됩니다 . 가된다 리틀 엔디안과 빅 엔디안에서. OD의 전체 출력은 또한 우리가 사용할 수 없습니다 의미 주소와 크기 데이터를 포함 , 또는 시험에.005000
000012
61 0A
005141
060412
0
1
2
이 명령은 시스템의 엔디안을 노출하도록 잘 정의되어 있습니다. 에서 표준 :
숫자 값을 해석 할 때 사용되는 바이트 순서는 구현에 따라 정의되지만 해당 유형의 상수가 시스템의 메모리에 저장되는 순서와 일치해야합니다.
호환성 노트
넣어도 확실하지 않습니다 echo|od
큰 따옴표없이 큰 따옴표없이 역 따옴표를case
모든 시스템 에서 3 워드 인수 가 지원 . 모든 시스템이 줄 바꿈없이 쉘 스크립트를 지원하는지 확실하지 않습니다. 나는 빅 엔디안 시스템에서 패딩 바이트를 추가하는 od 동작의 100 %가 아니라고 확신합니다. 필요한 경우 echo a
휴대용 버전에 사용할 수 있습니다. 모든 스크립트는 bash, ksh 및 zsh에서 작동하며 이식 가능한 스크립트는 대시로 작동합니다.