$ ((...))
$ echo $(( 3 * 4 )) 12
일부 장면에서는 특정 작업의 검증과 같은 프로그램 작성의 번거로움을 해소할 수 있도록 특히 편리합니다.
다음은 컴퓨팅 시스템 연습 2. 12 에 대한 심층적인 이해를 검증하는 시나리오입니다.
표현식 ~0 은 전체 1 의 마스크를 생성합니다. 기계의 글자 길이 크기에 관계없이 이식이 가능합니다.
$ printf "%x \ n" $ (~ 0)) ffffffffffffffffffff fff
$ printf "%# x \ n" $ (~ 0)) 0x fffffffffffffffffffffff fff
위의 테스트에 따르면 셸에서 0 의 비트 반전은 64 비트입니다.
인쇄 쉘에 대한 printf 명령의 선행 문자: 쉘 스크립트 학습 안내서의 표 7-4 는 형식 매개변수에서 "#" 기호의 의미를 설명하고 "#" 를 사용하여 선행 문자 "0x" (16 16 진수) 를 출력할 수 있습니다
X & amp0xFF 는 x 의 가장 낮은 유효 바이트로 구성된 값을 생성합니다.
$ printf "%# x \ n" $ ((0x89 abcdef & 0xFF ))0xef
$ printf "%# .8x \ n" $ ((0x89 abcdef & 0xFF ))0x000000ef
다음 x = 0x8765432 1
A.x 의 최소 유효 바이트 및 기타 모든 비트는 0 으로 설정됩니다.
$ printf "%# .8x \ n" $ ((0x87654321& 0xFF )) 0x0000002 1
$ printf "%# .8x \ n" $ ((0x87654321& -응? Bash: 0x87654321& -응? 0xFF: 구문 오류: 피연산자 필요 (오류 태그는'? 0xFF) 를 참조하십시오
책에 제시된 연습 문제의 답은 "X &;; -응? 0xFF ","? "여기 있습니다. 1 번호는 셸이 제대로 작동하지 않음을 확인합니다.
B x 의 가장 낮은 유효 바이트를 제외한 모든 위치가 보충되고 가장 낮은 유효 바이트는 그대로 유지됩니다.
$ printf "%# x" $ ((0x87654321~ 0xff)) 0xffffffffff789abc21
~0xff 가 64 비트 마스크를 생성하기 때문에 결과는 다소 의외지만 마지막 32 비트는 예상됐다.
C.x 의 최소 유효 바이트는 전체 1 으로 설정되고 다른 모든 바이트는 그대로 유지됩니다.
$ printf "%# x" $ ((0x87654321| 0xff)) 0x876543ff