読み取った変数の長さを確認する必要があります(私のスクリプトは挿入された5文字に制限されています)。次のようなものが欲しい。
#!/bin/bash
read string
check=${#string}
echo $check
if [ $check -ge 5 ]; then echo "error" ; exit
else echo "done"
fi
もう少し「エレガントな」ソリューションがありますか?
答え1
もっとエレガントに?いいえ
短いですか?例:)
#!/bin/bash
read string
if [ ${#string} -ge 5 ]; then echo "error" ; exit
else echo "done"
fi
より短い長さでよりエレガンスを変えることが気に入らない場合は、2行少ない行でスクリプトを作成できます。
#!/bin/bash
read string
[ ${#string} -ge 5 ] && echo "error" || echo "done"
より安全だと思われる場合は、二重括弧を使用できます。ここで説明されています。
答え2
Bourne互換の代替(${#string}
POSIXですが、Bourneではありません(これまでBourneシェルに触れたことがないかもしれません)):
case $string in
?????*) echo >&2 Too long; exit 1;;
*) echo OK
esac
との場合、${#string}
バイト????
数か文字数かはシェルによって異なります。通常は(そしてPOSIXで要求される)文字数です。ただし、このような一部のシェルでは、dash
マルチバイトではなくバイトをサポートしています。
これを行うには、(UTF-8ロケールで)マルチバイト文字を理解するmksh
必要があります。set -o utf8-mode
$ 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