Je dois vérifier la longueur de la variable lue (ma limite de script à 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
existe-t-il une solution plus "élégante"?
/bin/sh
. Vous devriez envisager de changer la ligne shebang pour#!/bin/sh
qu'elle soit plus portable et s'exécute dans des environnements où bash n'est pas disponible. De plus,/bin/sh
peut être un shell plus léger comme un tableau de bord qui n'est pas surchargé de fonctionnalités destinées à une utilisation interactive.dash
est${#string}
-vous donner la longueur en nombre d'octets au lieu de caractères.Réponses:
Plus élégant? Non
Plus court? Oui :)
Et si vous n'avez aucun problème à échanger plus d'élégance en faveur d'être plus court, vous pouvez avoir un script avec 2 lignes de moins:
Vous pouvez utiliser des crochets doubles si vous pensez que c'est plus sûr. Explication ici .
la source
Une alternative compatible avec Bourne (
${#string}
est POSIX mais pas Bourne (pas que vous rencontrerez probablement un shell Bourne de nos jours)):Notez que pour les deux
${#string}
et????
, que ce soit le nombre d'octets ou de caractères dépendra du shell. Généralement (et c'est requis par POSIX), c'est le nombre de caractères. Mais pour certains shells commedash
celui-ci qui ne sont pas multi-octets, ce seront des octets à la place.Avec
mksh
, vous avez besoinset -o utf8-mode
(dans les locales UTF-8) pour qu'il comprenne les caractères multi-octets:la source
echo Too long
différent sous le capot deecho 'Too long'
if
option :)echo Too long
passe deux arguments (Too
etlong
)echo
auxquels lesecho
sorties sont séparées par un espace (et suivies d'un retour à la ligne), tandis que dansecho 'Too long'
, nous passons unToo long
argumentecho
auquel il s'affiche suivi d'un retour à la ligne. C'est donc fonctionnellement équivalent.