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?
21 Answer
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.