Почему есть разница между выводом 'echo $VAR | wc -c'и'echo ${#VAR}'?

Я работаю над сценарием Bash, и длина строки, содержащейся в определенной переменной, является одним из моих условий. Текущая строка W5u7TBTzF17GGFV8DBJHvgAAAAI, Сначала я посчитал длину строки с помощью wc -c:

$ VAR='W5u7TBTzF17GGFV8DBJHvgAAAAI'; echo "$VAR" | wc -c
28

Но мое условие сценария [[ ${#VAR} -eq 28 ]] никогда не проходи Тогда я решил посчитать персонажей по одному. На самом деле длина строки составляет 27 символов, а также значение ${#VAR} это 27:

$ echo "${#VAR}"
27

Так что я задаюсь вопросом - откуда эта разница?

1 ответ

Решение

Это путь echo работает. Сейчас делаю

echo koko

Ты получаешь

georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo koko
koko

Но делать echo -n koko и вы получите

georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo -n koko
kokogeorgek@georgek-HP-Pavilion-17-Notebook-PC:~$

Так wc захватывает newline character тоже. использование

echo -n "${VAR}" | wc -c

Чтобы получить желаемый результат. echo Команда добавит newline характер, так что это тоже учитывается. Чтобы удалить это и получить реальный счет, используйте -n вариант.

Другие вопросы по тегам