순수 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`
-n
echo 플래그는 개행 인쇄를 중지합니다 . 플래그는 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`
echo
echo를 사용하면 후행 줄 바꿈이 추가되고 이를 억제하는 표준 방법이 없기 때문에 사용하려고 하지 마세요 .
현재 로케일에 차이가 있는 경우 wc -m
문자 수와 바이트 수를 계산합니다 .wc -c