변수에 어떤 문자가 포함되어 있는지 확인하고 숫자와 비교하는 방법은 무엇입니까? [폐쇄]

변수에 어떤 문자가 포함되어 있는지 확인하고 숫자와 비교하는 방법은 무엇입니까? [폐쇄]

1부터 9까지의 후속 시간이 숫자로 기록된 다음 후속 알파 문자로 기록되는 시간 기록이 있습니다. 시간을 일반 형식으로 저장하고 싶어서 알파벳 글자를 다음 숫자로 변환해야 합니다.

파일 이름에서 시, 분, 초를 제거했습니다.

 endOfFile=${files: -9}
 currentTime=${endOfFile%.*}
 firstLetter=$(printf %.1s "$currentTime")
 echo "$firstLetter"

     

산출:

 1

3

5

7

9

B

D

F

H

J

변수에 숫자나 문자가 포함되어 있는지 어떻게 확인하고, 그렇다면 적절한 숫자로 바꿀 수 있나요?

답변1

의견에 있는 내 제안에 따라:ASCII 코드에서:

  • 첫 번째 문자의 ASCII 코드를 가져옵니다. ( ord_fl=$(printf %d "'$firstletter")
    그런데 앞의 작은따옴표는 의도적인 것입니다.)
  • 55 빼기: hour=$(($ord_fl-55))
    대문자에 대한 ASCII 코드는 65(십진수)부터 시작하여 알파벳순으로 증가하므로 A의 원하는 출력은 10이 되어야 합니다.

의견에서 Stéphane이 제안한 다른 더 나은 아이디어는 다음과 같습니다.24진수를 10진수로 변환:

hour=$(( 24#$firstletter ))

참고: 정확한 구문은 쉘에 따라 다를 수 있습니다.
쉘이 이러한 확장을 구현하지 않는 경우 언제든지 bc다음 출력을 사용하여 얻을 수 있습니다.

echo "ibase=24; $firstletter" | bc

관련 정보