사용자 입력에서 오는 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에 숫자가 있거나 비어 있습니다(선언되지 않음).