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
28But 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}"
27So I'm in wondering - where does this difference come from?
21 Answer
It's the way echo works. Now do
echo kokoYou get
georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo koko
kokoBut 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 -cTo 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.