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 dash
itu 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/sh
sehingga akan lebih portabel dan berjalan di lingkungan di mana bash tidak tersedia. Plus,/bin/sh
mungkin shell yang lebih ringan seperti dasbor yang tidak dibebani dengan fitur yang dimaksudkan untuk penggunaan interaktif.