为什么'echo $VAR | 的输出之间存在差异?wc -c' 和 'echo ${#VAR}'?

pa4*_*080 6 command-line bash scripts echo wc

我正在处理 Bash 脚本,并且某个变量中包含的字符串长度是我的条件之一。当前字符串是W5u7TBTzF17GGFV8DBJHvgAAAAI. 最初我通过以下帮助计算字符串长度wc -c

$ VAR='W5u7TBTzF17GGFV8DBJHvgAAAAI'; echo "$VAR" | wc -c
28
Run Code Online (Sandbox Code Playgroud)

但我的脚本条件[[ ${#VAR} -eq 28 ]]从未通过。然后我决定一个一个地数字符。实际上字符串长度是 27 个字符,其值${#VAR}也是 27:

$ echo "${#VAR}"
27
Run Code Online (Sandbox Code Playgroud)

所以我想知道 - 这种差异来自哪里?

Geo*_*sen 13

这是工作的方式echo。现在做

echo koko
Run Code Online (Sandbox Code Playgroud)

你得到

georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo koko
koko
Run Code Online (Sandbox Code Playgroud)

但是echo -n koko,你会得到

georgek@georgek-HP-Pavilion-17-Notebook-PC:~$ echo -n koko
kokogeorgek@georgek-HP-Pavilion-17-Notebook-PC:~$
Run Code Online (Sandbox Code Playgroud)

所以wc被捕获newline character了。用

echo -n "${VAR}" | wc -c
Run Code Online (Sandbox Code Playgroud)

以获得想要的结果。该echo命令将添加newline字符,因此也会被计算在内。要删除它并获得实际计数,请使用该-n选项。

  • 几乎正确,直到最后一部分。[不要使用`echo -n`。只需使用 `printf '%s'`。](https://unix.stackexchange.com/a/65819/) (当然不要忘记引用 `"${VAR}"`。) (2认同)