Почему есть разница между выводом '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 вариант.