Przypadkowo odkryłem, że wc
liczy się inaczej w zależności od tego, jak pobiera dane wejściowe z bash:
$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Czy to gdzieś udokumentowane zachowanie IMHO? Co się wc
tu liczy - czy to zakładana nowa linia?
bash
newlines
wc
here-string
rexkogitans
źródło
źródło
od -c
aby zobaczyć dokładnie to, co masz.xxd -g1
.printf "$s"
nie jest to twój skrypt ... mam nadzieję, że miałeś na myśliprintf "%s" "$s"
Odpowiedzi:
Różnica wynika z nowej linii dodanej do ciągu tutaj. Zobacz instrukcję Bash :
wc
liczy się w ten sam sposób, ale jego dane wejściowe są inne.źródło
printf %s "$var"
(lubprint -rn -- "$var"
z podobnego muszli ksh), a nieprintf "$var"
, które nie działają poprawnie dla wartości$var
, które zawierają%
lub znaki backslash (lub zacznij od-
większości implementacji).rc
nie dodawała tego znaku nowej linii.Jest to nowa linia dodana przez przekierowujący ciąg znaków:
źródło