echo 变量后立即带有字母

echo 变量后立即带有字母
p=$( power )
echo "Power now: ${p}W"

印刷

Wower now: 357

这毫无意义。这肯定是一个错误吗?

答案1

Wower now: 357

啊,是的,这实际上是以下序列,一个字节接一个字节

P (0x50)
o (0x6f)
w (0x77)
e (0x65)
r (0x72)
  (0x20)
n (0x6e)
o (0x6f)
w (0x77)
: (0x3a)
  (0x20)
3 (0x33)
5 (0x35)
7 (0x37)
jump-back-to-beginning-of-line (0x0d) ## called "carriage return", if you know typewriters…
W (0x57)

因此,您的power命令出于人类未知的原因输出357\r(回车)。

解决方案:只打印来自 的实际数字power,例如:

p=$( power | grep -o '[[:digit:]]*' )
echo "Power now: ${p}W"

或更紧凑:

power | sed -n 's/^\([[:digit:]]*\).*$/Power now: \1 W/p'

相关内容