읽은 변수의 길이를 확인해야 합니다(내 스크립트는 삽입된 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