Je dois calculer la longueur d'une chaîne en utilisant uniquement sh Shell. Ce qui se passe, c’est que /bin/sh
est en fait un lien symbolique vers bash ou un autre shell. Ainsi, ${#STRING}
donne la longueur de la chaîne car il s'agit de la fonctionnalité advance bash.
Quelqu'un peut-il me dire comment je peux trouver la longueur de la chaîne? J'utilise l'architecture Solaris 5.10 Sparc
wc -m
compte les caractères dans une chaîne. Donc, vous pouvez faire quelque chose comme:
STRLENGTH=$(echo -n $STRING | wc -m)
Syntaxe alternative:
STRLENGTH=`echo -n $STRING | wc -m`
L’indicateur -n
pour écho empêche l’impression d’une nouvelle ligne. L’indicateur peut être différent sous Solaris 5. Vérifiez man echo
Voici deux façons de le faire.
myvar="This is a test"
echo "${#myvar}"
14
Ou
expr length "${myvar}"
14
Voici deux manières:
echo ${#VAR}
echo -n $VAR | wc -m
echo -n $VAR | wc -c
printf $VAR | wc -m
expr length $VAR
expr $VAR : '.*'
http://techopsbook.blogspot.fr 2017/09/how-to-find-length-of-string-variable.html
Utiliser ${#string}
pour obtenir la longueur de $string
est un développement de paramètre pour le shell POSIX . Ce n'est pas une caractéristique bash
- seulement.
Sous Solaris 5.10, si /bin/sh
ou /usr/bin/sh
(comme indiqué dans le manuel sh(1)
) ne le prend pas en charge, alors /usr/xpg4/bin/sh
le fera.
Pour obtenir le comportement POSIX sur un système Solaris 5.10, votre PATH
doit être défini sur
/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin
(dans cet ordre), comme décrit dans le manuel standards(5)
.
Je ne pense pas que "pure sh" puisse le faire. Mais vous n'avez rien à faire en "sh pur"; vous devez le faire dans sh plus les utilitaires standard. Le moyen le plus simple est:
strlength=`expr "$string" : ".*"`
( expr est POSIX). Sinon, si vous n'avez pas expr
(Solaris 5.1 est ancien), vous pouvez également utiliser wc avec printf comme:
strlength=`printf "%s" "$string" | wc -m`
N'essayez tout simplement pas d'utiliser echo
, car echo ajoutera des retours à la ligne et il n'existe aucun moyen standard de le supprimer.
Notez que wc -m
compte les caractères et wc -c
compte les octets s'il existe une différence dans les paramètres régionaux en cours.
set var = "test test test";
echo $% var;
14
(Bien qu'il y ait déjà beaucoup de réponses, mais pense qu'elles ne sont pas si intuitives, j'ajouterais donc une réponse pour que ce soit clair à première vue)
Si vous voulez juste le faire dans Shell (bash) en ligne de commande (ou même un script) .
Vous pouvez utiliser l’une des méthodes suivantes:
echo -n
et wc -m
printf
et wc -m
par exemple
# 5
echo -n hello | wc -m
# 11
echo -n "hello world" | wc -m
# 5
printf "hello" | wc -m
# 11
printf "hello world" | wc -m
# 11
printf "hello %s" world | wc -m
Astuces:
echo
par défaut ajoutera une nouvelle ligne à la fin. L'option -n
est donc nécessaire pour éviter cela.