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