Accidentalmente, descubrí que wc
cuenta de manera diferente dependiendo de cómo obtiene la entrada de bash:
$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
¿Es esto, en mi humilde opinión, un comportamiento documentado en alguna parte? ¿Qué wc
cuenta aquí? ¿Es esta una nueva línea asumida?
bash
newlines
wc
here-string
rexkogitans
fuente
fuente
od -c
ver exactamente lo que tienes.xxd -g1
.printf "$s"
no es su guión real ... espero que quería decirprintf "%s" "$s"
Respuestas:
La diferencia es causada por una nueva línea agregada a la cadena aquí. Ver el manual de Bash :
wc
está contando de la misma manera, pero su entrada es diferente.fuente
printf %s "$var"
(oprint -rn -- "$var"
con shells tipo ksh),printf "$var"
que no funcionaría correctamente para los valores$var
que contienen%
caracteres de barra diagonal inversa (o comenzar con la-
mayoría de las implementaciones).rc
no agregó ese carácter de nueva línea.Es una nueva línea exitosa agregada por el redirector here-string:
fuente