변수 길이 확인

변수 길이 확인

읽은 변수의 길이를 확인해야 합니다(내 스크립트는 삽입된 5자로 제한됩니다). 다음과 같은 것을 원합니다.

#!/bin/bash
read string
check=${#string}
echo $check
if [ $check -ge 5 ]; then echo "error" ; exit
else echo "done"
fi

좀 더 "우아한" 솔루션이 있나요?

답변1

좀 더 우아하게? 아니요

더 짧나요? 예:)

#!/bin/bash
read string
if [ ${#string} -ge 5 ]; then echo "error" ; exit
else echo "done"
fi

더 짧은 길이로 더 우아함을 바꾸는 것이 마음에 들지 않으면 2줄 더 적은 줄로 스크립트를 작성할 수 있습니다.

#!/bin/bash
read string
[ ${#string} -ge 5 ] && echo "error" || echo "done"

더 안전하다고 생각되면 이중 괄호를 사용할 수 있습니다.여기에 설명되어 있습니다.

답변2

Bourne 호환 대안( ${#string}POSIX이지만 Bourne은 아님(지금까지 Bourne 쉘을 접한 적이 없을 수도 있음)):

case $string in
  ?????*) echo >&2 Too long; exit 1;;
       *) echo OK
esac

및 의 경우 ${#string}바이트 ????수인지 문자 수인지는 셸에 따라 다릅니다. 일반적으로 (그리고 POSIX에서 요구되는) 문자 수입니다. 그러나 이와 같은 일부 쉘의 경우 dash멀티바이트가 아닌 바이트를 지원합니다.

이를 위해서는 (UTF-8 로케일에서) 멀티바이트 문자를 이해하도록 mksh해야 합니다 .set -o utf8-mode

$ string=€€€ bash -c 'echo "${#string}"'
3
$ string=€€€ dash -c 'echo "${#string}"'
9
$ string=€€€ mksh -c 'echo "${#string}"'
9
$ string=€€€ mksh -o utf8-mode -c 'echo "${#string}"'
3
$ locale charmap
UTF-8

관련 정보