Case 문에서 16진수 값 일치

Case 문에서 16진수 값 일치

0x0016진수 종료 코드(예: 성공, 0x40 - 0x4F사용자 오류, 0x50 - 0x5F내부 오류 등) 를 반환하는 것으로 기록된 프로세스의 종료 코드를 일치시키려고 합니다 . 명령문을 통해 종료 코드를 처리하고 싶지만 case"명백한" 솔루션이 일치하지 않습니다.

$ $val = 10

$ case $val in
>   0xA) echo match;;
>   *) echo no match;;
> esac
no match

case명령문에서 16진수 값을 일치시키는 읽을 수 있는 방법이 있습니까 ?

답변1

예, 이중 괄호입니다.산술 연산자case16진수 값 이 일치 하도록 10진수로 표시됩니다 .

$ echo $((0xA))
10

$ case $val in
>   $((0xA))) echo match;;
>   *) echo no match;;
> esac
match

답변2

printf값을 16진수 문자열로 변환 할 수 있습니다 .

case $(printf '%02x' $val) in
    0a) echo match;;
     *) echo no match;;
esac

이렇게 하면 애플리케이션 내에서 전체 오류 범주를 일치시킬 수 있습니다.

case $(printf '%02x' $?) in
    00) echo success;;
    4?) echo user error;;
    5?) echo internal error;;
     *) echo unrecognised error;;
esac

답변3

프로세스가 0x0A 문자열을 반환하면 케이스는 0xA로 실패합니다. 숫자를 사용하는 경우 10을 사용해야 합니다.

관련 정보