एक बॉर्न-संगत विकल्प ( ${#string}
POSIX है, लेकिन बॉर्न नहीं है (ऐसा नहीं है कि आप कभी भी बॉर्न शेल के साथ आने की संभावना है):
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
/bin/sh
। आपको शेबबैंग लाइन को बदलने पर विचार करना चाहिए#!/bin/sh
ताकि यह अधिक पोर्टेबल हो और वातावरण में चले जहां बैश उपलब्ध नहीं है। इसके अलावा,/bin/sh
डैश की तरह एक अधिक हल्का खोल हो सकता है जो इंटरैक्टिव उपयोग के लिए सुविधाओं के साथ बोझ नहीं है।