숫자에서 첫 번째 숫자를 추출하는 방법(bash 스크립트의 변수)? [복사]

숫자에서 첫 번째 숫자를 추출하는 방법(bash 스크립트의 변수)? [복사]

사용자 입력에서 오는 numbers=$@변수 를 가정합니다 . $@사용자 입력 과 첫 번째 숫자를 가져와 다른 변수에 저장하고 ./script.sh 901.32.02싶습니다 . 9어떻게 해야 하나요? 내가 하라고 했어

  for n in `seq 1 $count`
    do var=${numbers[0]}
  done

echo $var하지만 대신 전체 입력 내용을 인쇄하면 됩니다 9.

답변1

Bash에서는 다음을 사용하여 첫 번째 문자를 추출할 수 있습니다.매개변수 확장:

${parameter:offset:length}

예:

$ var=901.32.02
$ first_char="${var:0:1}"
$ echo "${first_char}"
9

답변2

numbers='901.32.02'
firstdigit="${numbers:0:1}"

printf 'The first digit is "%s"\n' "$firstdigit"

위의 결과는

The first digit is "9"

${numbers:0:1}매개변수 확장은 bash문자열의 시작 부분(오프셋 0)부터 시작하여 길이 1의 하위 문자열을 제공합니다. 이는 bash특정 매개변수 대체입니다(다른 일부 쉘에도 있지만 POSIX 표준에는 없음).

POSIX 쉘에서는 다음을 수행할 수도 있습니다.

firstdigit=$( printf "%s\n" "$numbers" | cut -c 1 )

cut이는 첫 번째 문자만 반환하는 데 사용됩니다 .

또는 표준 매개변수 확장을 사용하여

firstdigit="${numbers%${numbers#?}}"

이것은 먼저 ${numbers#?}첫 번째 숫자로 문자열을 만드는 데 사용됩니다.삭제됨$numbers, 그런 다음 사용 끝에서 문자열을 제거합니다 ${numbers%suffix}( suffix첫 번째 확장의 결과는 어디에 있습니까?).


위에서 가정한 첫 번째 문자 $numbers는 실제로 숫자입니다. 그렇지 않은 경우 먼저 값의 시작 부분에서 숫자가 아닌 숫자를 제거해야 합니다.

numbers=$( printf '%s\n' "$numbers" | sed 's/^[^0-9]*//' )

또는,

numbers="${numbers#${numbers%%[0-9]*}}"

${numbers[0]}각 문자가 별도의 요소인 경우에 작동합니다.대량으로 numbers(첫 번째 문자가 숫자인 경우) 배열이 아니기 때문에 numbers와 동일합니다 $numbers.

답변3

다음 방법을 사용할 수도 있습니다.

cat script.sh

   #!/bin/bash
echo $1 | awk '{print substr($1,1,1)}'



 sh script.sh 90

Where 90 is the user input

출력은 9

답변4

숫자만 감지하고 다른 문자 유형은 감지하지 않으려면 간단한 정규식을 사용해야 합니다.

[[ ${numbers} =~ ^([[:digit:]]) ]] && var=${BASH_REMATCH[1]}

$var에 숫자가 있거나 비어 있습니다(선언되지 않음).

관련 정보