Why there is a difference between the output of 'echo $VAR | wc -c' and 'echo ${#VAR}'?
I'm working on a Bash script and the length of the string contained in a certain variable is one of my conditions. The current string is W5u7TBTzF17GGFV8DBJHvgAAAAI
. Initially I've count the string length by the help of wc -c
:
$ VAR='W5u7TBTzF17GGFV8DBJHvgAAAAI'; echo "$VAR" | wc -c
28
But my script condition [[ ${#VAR} -eq 28 ]]
never pass. Then I decided to count the characters on by one. Indeed the string length is 27 characters, also the value of ${#VAR}
is 27:
$ echo "${#VAR}"
27
So I'm in wondering - where does this difference come from?
It's the way echo
works. Now do
echo koko
You get
georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo koko
koko
But do echo -n koko
and you get
georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo -n koko
kokogeorgek@georgek-HP-Pavilion-17-Notebook-PC:~$
So wc
is capturing the newline character
too. Use
echo -n "${VAR}" | wc -c
To get the desired result. The echo
command will add the newline
character, so that gets counted too. To remove this and get the real count use the -n
option.