Accidentially, eu descobri que wc
conta diferentemente dependendo de como obtém a entrada do bash:
$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Esse comportamento - IMHO confuso - está documentado em algum lugar? O que wc
conta aqui - essa é uma nova linha assumida?
bash
newlines
wc
here-string
rexkogitans
fonte
fonte
od -c
para ver exatamente o que tem.xxd -g1
.printf "$s"
não é o seu próprio script ... espero que você quis dizerprintf "%s" "$s"
Respostas:
A diferença é causada por uma nova linha adicionada à string here. Veja o manual do Bash :
wc
está contando da mesma maneira, mas sua entrada é diferente.fonte
printf %s "$var"
(ouprint -rn -- "$var"
com shells semelhantes a ksh), não oprintf "$var"
que não funcionaria corretamente para valores$var
que contenham%
ou caracteres de barra invertida (ou comece com-
a maioria das implementações).rc
não adicionou esse caractere de nova linha.É uma nova linha subsequente adicionada pelo redirecionador here-string:
fonte