echo $SHELL
/bin/bash
echo $SHELL | wc -c
10
echo ${#SHELL}
9
< p >变量$SHELL
中包含9个字符(例如/bin/bash
),那么使用wc -c
命令为什么结果是10呢?< /p >
echo
添加了换行符,这就是为什么会出现这种情况。当你输入以下命令时:$ echo $SHELL
/bin/bash
$
echo
命令输出一个换行符,该换行符在 wc
字符计数中被计算。
另一方面, ${#SHELL}
是一个shell 扩展。Shell 使用扩展执行字符计数,没有额外的换行符,因为 echo
实际上还没有运行。所以,echo ${#SHELL}
实际上转换成了 echo 9
。数字 9
带有由 echo
添加的尾随换行符进行打印。
${#SHELL}
。wc -c
计算字节,而不是字符。wc -m
。$ x="/x/♤/é/"
$ echo ${#x}
$ echo -n "$x" | wc -c
$ echo -n "$x" | wc -m
${#SHELL}
是一个shell扩展。该扩展执行字符计数,但不包括换行符,因为echo
尚未实际运行。因此,echo ${#SHELL}
实际上转换为带有尾随换行符的echo 9
。 - Ben Whaleywc -c
替换为xxd
来找到这个。 - user1934428