Alternatif Bourne-kompatibel ( ${#string}POSIX tetapi bukan Bourne (bukan bahwa Anda mungkin pernah menemukan shell Bourne hari ini)):
case $string in
?????*) echo >&2 Too long; exit 1;;
*) echo OK
esac
Perhatikan bahwa untuk keduanya ${#string}dan ????, apakah itu jumlah byte atau karakter akan tergantung pada shell. Umumnya (dan itu diperlukan oleh POSIX), itu adalah jumlah karakter. Tetapi untuk beberapa shell seperti dashitu tidak sadar multi-byte, itu akan menjadi byte sebagai gantinya.
Dengan mksh, Anda perlu set -o utf8-mode(di lokal UTF-8) agar dapat memahami karakter multi-byte:
$ 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. Anda harus mempertimbangkan untuk mengubah garis shebang#!/bin/shsehingga akan lebih portabel dan berjalan di lingkungan di mana bash tidak tersedia. Plus,/bin/shmungkin shell yang lebih ringan seperti dasbor yang tidak dibebani dengan fitur yang dimaksudkan untuk penggunaan interaktif.