Aus Versehen habe ich herausgefunden, dass dies wc
unterschiedlich zählt, je nachdem, wie es die Eingabe von bash erhält:
$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Ist dieses - meiner Meinung nach verwirrende - Verhalten irgendwo dokumentiert? Was wc
zählt hier - ist dies eine angenommene Newline?
bash
newlines
wc
here-string
Rexkogitans
quelle
quelle
od -c
um genau zu sehen, was Sie haben.xxd -g1
.printf "$s"
ist nicht Ihr eigentliches Skript ... hoffentlich meinten Sieprintf "%s" "$s"
Antworten:
Der Unterschied wird durch eine neue Zeile verursacht, die der hier angegebenen Zeichenfolge hinzugefügt wird. Siehe das Bash-Handbuch :
wc
zählt auf die gleiche Weise, aber seine Eingabe ist unterschiedlich.quelle
printf %s "$var"
(oderprint -rn -- "$var"
mit ksh-ähnlichen Shells),printf "$var"
was für Werte$var
, die%
Zeichen oder Backslash-Zeichen enthalten (oder ) nicht korrekt funktionieren würde Beginnen Sie mit den-
meisten Implementierungen.rc
dieses Zeilenumbruchzeichen nicht hinzugefügt hat.Es ist eine nachfolgende Newline, die vom Here-String-Redirector hinzugefügt wurde:
quelle