Случайно я обнаружил, что wc
значение по-разному зависит от того, как он получает информацию от bash:
$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Это - ИМХО сбивает с толку - поведение где-то задокументировано? Что wc
здесь значить - это предполагаемый перевод строки?
bash
newlines
wc
here-string
rexkogitans
источник
источник
od -c
посмотреть, что именно у вас есть.xxd -g1
.printf "$s"
это не ваш настоящий сценарий ... надеюсь, вы имели в видуprintf "%s" "$s"
Ответы:
Разница вызвана новой строкой, добавленной к строке here. Смотрите руководство по Bash :
wc
рассчитывает таким же образом, но его ввод отличается.источник
printf %s "$var"
(илиprint -rn -- "$var"
с ksh-подобными оболочками), что неprintf "$var"
будет работать правильно для значений,$var
которые содержат%
символы или символы обратной косой черты (или начать с-
большинства реализаций).rc
не добавила этот символ новой строки.Это следующий перевод строки, добавленный перенаправителем here-string:
источник