변수 길이 확인

변수 읽기 길이를 확인했습니다 (내 스크립트는 삽입 된 문자 5 개로 제한). this :

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

더 “우아한”솔루션이 있습니까?

댓글

  • 스크립트가 표준 POSIX /bin/sh에서 올바르게 작동합니다. 이동성을 높이려면 shebang 줄을 #!/bin/sh로 변경하는 것이 좋습니다. bash를 사용할 수없는 ' 환경에서 실행됩니다. 또한 /bin/sh는 대시와 같은 더 가벼운 쉘일 수 있지만 ' 대화식 사용을위한 기능에 부담을주지 않습니다.
  • @Celada, 사실이지만이 경우에는 dash '의 ${#string}는 문자 대신 바이트 수로 길이를 제공합니다.

Answer

M 우아한 광석? 아니요

짧으세요? 예 🙂

#!/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" 

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

답변

Bourne 호환 대안 (${#string}은 POSIX이지만 Bourne은 아닙니다 (요즘 Bourne 쉘을 접할 가능성이 없음)) :

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

${#string}???? 모두에 대해 바이트 수 또는 문자 수는 일반적으로 (POSIX에서 필요로 함) 문자 수입니다. 그러나 멀티 바이트를 인식하지 않는 dash와 같은 일부 셸의 경우 대신 바이트가됩니다.

mksh, 다중 바이트 문자를 이해하려면 set -o utf8-mode (UTF-8 로케일)가 필요합니다.

$ 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 

댓글

  • 주제에서 벗어 났지만 echo 'Too long'echo Too long 내부적으로 다릅니다. >
  • 그리고 '의 " 너무 긴 , if 옵션에서 더 많이 압축 할 수 있습니다. 🙂
  • @StevenPenny, echo Too long는 두 개의 인수 (Toolong)를 echo에 전달합니다. e79242ecd5 “>

출력은 공백 (및 줄 바꿈)으로 구분 된 반면 echo 'Too long'에서는 Too long 하나를 전달합니다. 다음 줄 바꿈으로 표시됩니다. 따라서 ' 기능적으로 동일합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다