쉘에서 문자열 길이를 찾는 방법

쉘에서 문자열 길이를 찾는 방법

순수 sh 쉘만을 사용하여 문자열 길이를 계산해야 합니다. 무슨 일이 일어나고 있는지는 /bin/sh실제로 bash 또는 다른 쉘에 대한 소프트 링크라는 것입니다. 따라서 ${#STRING}고급 bash 기능이므로 문자열 길이를 제공합니다.

누군가 문자열 길이를 찾는 방법을 말해 줄 수 있습니까? 나는 Solaris 5.10 Sparc 아키텍처를 사용하고 있습니다.

답변1

wc -m문자열의 문자 수를 계산합니다. 따라서 다음과 같이 할 수 있습니다:

STRLENGTH=$(echo -n $STRING | wc -m)

대체 구문:

STRLENGTH=`echo -n $STRING | wc -m`

-necho 플래그는 개행 인쇄를 중지합니다 . 플래그는 Solaris 5에서 다를 수 있습니다. 확인하십시오.man echo

답변2

이를 수행하는 몇 가지 방법이 있습니다.

myvar="This is a test"
echo "${#myvar}"
14

또는

expr length "${myvar}"
14

답변3

${#string}길이를 구하는 데 사용하는 $string것은 다음과 같습니다.POSIX 쉘 매개변수 확장. 이것은 유일한 기능이 아닙니다 bash.

Solaris 5.10에서 if /bin/sh또는 /usr/bin/sh(sh(1)설명서)이 이를 지원하지 않으면 /usr/xpg4/bin/sh지원됩니다.

Solaris 5.10 시스템에서 POSIX 동작을 얻으려면 다음 PATH과 같이 설정해야 합니다.

/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin

(순서대로)standards(5)수동.

답변4

나는 "순수한 sh"가 그것을 할 수 있다고 생각하지 않습니다. 하지만 "pure sh"에서는 아무것도 할 필요가 없습니다. sh와 표준 유틸리티에서 수행해야 합니다. 가장 간단한 방법은 다음과 같습니다.

strlength=`expr "$string" : ".*"`

(특급POSIX)입니다. 또는 없으면 expr(Solaris 5.1은 고대 버전임) 다음을 사용할 수도 있습니다.화장실함께printf좋다:

strlength=`printf "%s" "$string" | wc -m`

echoecho를 사용하면 후행 줄 바꿈이 추가되고 이를 억제하는 표준 방법이 없기 때문에 사용하려고 하지 마세요 .

현재 로케일에 차이가 있는 경우 wc -m문자 수와 바이트 수를 계산합니다 .wc -c

관련 정보