Проверьте длину переменной

Я должен проверить длину прочитанной переменной (мой скрипт ограничивается пятью введенными символами), я думаю о чем-то вроде этого:

#!/bin/bash
read string
check=${#string}
echo $check
if [ $check -ge 5 ]; then echo "error" ; exit
else echo "done"
fi

есть ли более «элегантное» решение?

16 голосов | спросил Pol Hallen 17 J000000Thursday14 2014, 21:08:34

1 ответ


3

Альтернатива, совместимая с Bourne (${#string} - это POSIX, но не Bourne (не то, что вы, вероятно, когда-либо встретите оболочку Bourne в эти дни)):

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
ответил Stéphane Chazelas 20 PMpThu, 20 Apr 2017 19:30:31 +030030Thursday 2017, 19:30:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132