为什么’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 

所以我在想 – 这种差异来自哪里?

这是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选项。