为什么 'echo $VAR | wc -c' 和 'echo ${#VAR}' 的输出有区别?

为什么 '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选项。

相关内容