ทางเลือกที่เข้ากันได้กับบอร์น ( ${#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/shPOSIX คุณควรพิจารณาเปลี่ยนสาย shebang#!/bin/shเป็นแบบพกพามากขึ้นและทำงานในสภาพแวดล้อมที่ไม่มีการทุบตี นอกจากนี้/bin/shอาจเป็นเปลือกที่เบากว่าเช่นเส้นประซึ่งไม่ได้รับภาระกับคุณสมบัติที่มีไว้สำหรับการใช้งานแบบโต้ตอบ