Bash 스크립트 한 자리 또는 두 자리 숫자를 받아 두 자리로 만드는 방법

Bash 스크립트 한 자리 또는 두 자리 숫자를 받아 두 자리로 만드는 방법

특정 입력에 대해 이상한 내 스크립트에서 다음과 같은 간단한 발췌문을 추출했습니다.

echo -e "Enter the Day of the Month : \c "
    read input_day
    printf -v input_day '%02d' "$input_day"

이렇게 하면 사용자가 단일 숫자(예: 2)를 입력하면 해당 숫자가 02로 변환됩니다. 이것이 나의 첫 번째 요청입니다. 이는 02와 같은 두 자리 숫자를 입력하는 경우에도 작동합니다. 그러면 02에 그대로 두겠습니다. 이는 12와 같은 2자리 숫자에도 적용됩니다. 그런데 이상한 점은 숫자 08과 09를 받아들일 수 없다는 점이죠? 08이나 09를 입력했을 때 나타나는 에러입니다.

Enter the Day of the Month : 08
2: line 20: printf: 08: invalid number

왜 그럴까요? printf 도움말 페이지를 읽으려고 시도했는데 "d"가 부호 있는 십진 정수를 의미한다는 것을 보여줍니다. 따라서 숫자 8과 9를 허용해야 합니다. 아니면 내가 뭔가를 놓치고 있는 걸까? 내 요구 사항은 사용자가 한 자리 "8"과 두 자리 "08"로 날짜를 입력할 수 있어야 한다는 것입니다.

답변1

bash앞에 0이 있는 숫자는 8진수로 해석됩니다. 형식이 문제가 아니라 $input_day변수가 문제입니다.

다양한 방법을 사용하여 제거할 수 있습니다(예를 들어 참조).awk는 C의 LTRIM 함수와 동일합니다.).

추가 자료:

그런데 예제에서는 변수가 비어 있는지 확인하지 않습니다. 그러나 이것을 올바르게 검증하는 것은 또 다른 문제가 될 것입니다.

관련 정보