Je « dois vérifier la longueur de la variable lue (mon script limite à cinq caractères insérés), je pense à quelque chose comme ceci:
#!/bin/bash read string check=${#string} echo $check if [ $check -ge 5 ]; then echo "error" ; exit else echo "done" fi 
y a-t-il une solution plus « élégante »?
Commentaires
Réponse
M ou élégant? Non
Plus court? Oui 🙂
#!/bin/bash read string if [ ${#string} -ge 5 ]; then echo "error" ; exit else echo "done" fi 
Et si vous navez aucun problème à trader plus délégance au profit dêtre plus court, vous pouvez avoir un script avec 2 lignes en moins:
#!/bin/bash read string [ ${#string} -ge 5 ] && echo "error" || echo "done" 
Vous pouvez utiliser des doubles crochets si vous pensez que cest plus sûr. Explication ici .
Réponse
 A Bourne-compatible alternative (${#string} est POSIX mais pas Bourne (pas que vous soyez susceptible de rencontrer un shell Bourne ces jours-ci)): 
case $string in ?????*) echo >&2 Too long; exit 1;; *) echo OK esac 
 Notez que pour ${#string} et ????, le nombre doctets ou de caractères dépendra de le shell. Généralement (et cest requis par POSIX), cest le nombre de caractères. Mais pour certains shells comme dash qui ne prennent pas en charge le multi-octet, ce sera plutôt des octets. 
 Avec mksh, vous avez besoin de set -o utf8-mode (dans les paramètres régionaux UTF-8) pour comprendre les caractères multi-octets: 
$ 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 
Commentaires
-  hors sujet, mais 
echo Too longdifférent sous le capot deecho 'Too long' -  Et, si vous voulez simplement imprimer quand ' s " trop long ", je peux compacter encore plus sur mon option 
if🙂 -  @StevenPenny, 
echo Too longtransmet deux arguments (Tooetlong) àechoquiechosorties séparées par un espace (et suivies dune nouvelle ligne), tandis que dansecho 'Too long', nous passons unToo longargument à quil affiche suivi dune nouvelle ligne. Donc, il est ' fonctionnellement équivalent. 
/bin/sh. Vous devriez envisager de changer la ligne shebang en#!/bin/shafin quelle soit plus portable et sexécuter dans des environnements où bash nest pas ' t disponible. De plus,/bin/shpourrait être un shell plus léger comme dash qui nest pas ' t surchargé de fonctionnalités destinées à une utilisation interactive.dash' s${#string}vous donnerait la longueur en nombre doctets au lieu de caractères.