Bourne uyumlu bir alternatif ( ${#string}POSIX'dir ancak Bourne değil (bugünlerde Bourne kabuğuna rastlama ihtimaliniz yoktur)):
case $string in
?????*) echo >&2 Too long; exit 1;;
*) echo OK
esac
Her ikisi için geldiğini hatırlatırız ${#string}ve ????bu bayt veya karakter sayısı olup olmayacağı, kabuk bağlı olacaktır. Genelde (ve POSIX tarafından zorunludur), karakter sayısıdır. Ancak dashbunun gibi bazı kabukları çok bayt farkında değildir, bunun yerine bayt olacaktır.
Bununla birlikte mksh, set -o utf8-modeçok baytlık karakterleri anlayabilmesi için (UTF-8 yerel ayarlarında) gerekir:
$ 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. Shebang hattını değiştirmeyi düşünmelisiniz,#!/bin/shböylece daha taşınabilir ve bash'ın bulunmadığı ortamlarda çalıştırılabilir. Ayrıca,/bin/shetkileşimli kullanım için tasarlanan özelliklerle dolu olmayan çizgi gibi daha hafif bir kabuk olabilir.