বোর্ন-সামঞ্জস্যপূর্ণ বিকল্প ( ${#string}
পসিক্স তবে বোর্ন নয় (এমন নয় যে আপনি আজকাল কখনও বোর্ন শেল পেরিয়ে আসতে পারেন)):
case $string in
?????*) echo >&2 Too long; exit 1;;
*) echo OK
esac
নোট করুন যে উভয়ের জন্য ${#string}
এবং ????
এটি শেলটির উপর নির্ভর করে বাইট বা অক্ষরের সংখ্যা হবে কিনা। সাধারণত (এবং এটি পসিক্স দ্বারা প্রয়োজনীয়) এটি অক্ষরের সংখ্যা। তবে এর মতো কয়েকটি শেলগুলি 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
ড্যাশের মতো আরও হালকা ওজনের শেল হতে পারে যা ইন্টারেক্টিভ ব্যবহারের জন্য বোঝানো বৈশিষ্ট্যগুলিতে বোঝা হয় না।