Par accident, j'ai découvert que cela wc
compte différemment selon la façon dont il obtient l'entrée de bash:
$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Ce comportement - à mon humble avis - est-il documenté quelque part? Qu'est-ce qui wc
compte ici - est-ce une nouvelle ligne supposée?
bash
newlines
wc
here-string
rexkogitans
la source
la source
od -c
voir exactement ce que vous avez.xxd -g1
.printf "$s"
n'est pas votre script réel ... j'espère que vous vouliez direprintf "%s" "$s"
Réponses:
La différence est causée par une nouvelle ligne ajoutée à la chaîne here. Voir le manuel de Bash :
wc
compte de la même manière, mais son entrée est différente.la source
printf %s "$var"
(ouprint -rn -- "$var"
avec des shells de type ksh),printf "$var"
ce qui ne fonctionnerait pas correctement pour les valeurs de$var
ce contenant%
ou des barres obliques inverses (ou commencer par la-
plupart des implémentations).rc
n'a pas ajouté ce caractère de nouvelle ligne.C'est une nouvelle ligne suivante ajoutée par le redirecteur here-string:
la source