web-dev-qa-db-fra.com

Pourquoi existe-t-il une différence entre le résultat de 'echo $ VAR | wc -c 'et' echo $ {# VAR} '?

Je travaille sur un script Bash et la longueur de la chaîne contenue dans une certaine variable est l'une de mes conditions. La chaîne en cours est W5u7TBTzF17GGFV8DBJHvgAAAAI. Au départ, j'ai compté la longueur de la chaîne à l'aide de wc -c:

$ VAR='W5u7TBTzF17GGFV8DBJHvgAAAAI'; echo "$VAR" | wc -c
28

Mais ma condition de script [[ ${#VAR} -eq 28 ]] ne passe jamais. Ensuite, j'ai décidé de compter les personnages par un. En effet, la longueur de la chaîne est de 27 caractères. La valeur de ${#VAR} est également 27:

$ echo "${#VAR}"
27

Je me demande donc - d'où vient cette différence?

6
pa4080

C'est la façon dont echo fonctionne. Maintenant faire

echo koko

Vous recevez

georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo koko
koko

Mais echo -n koko et vous obtenez

georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo -n koko
kokogeorgek@georgek-HP-Pavilion-17-Notebook-PC:~$

Donc, wc capture également le newline character. Utilisation

echo -n "${VAR}" | wc -c

Pour obtenir le résultat souhaité. La commande echo ajoutera le caractère newline, de sorte que celui-ci sera également comptabilisé. Pour supprimer ceci et obtenir le nombre réel, utilisez l'option -n.

13
George Udosen