Bash 脚本在我的变量中打印了错误的字符

Bash 脚本在我的变量中打印了错误的字符

我正在终端中尝试以下操作:

spark 0 76 100 | awk '{print substr($0,4,3)}'

输出:

如果我做:

GRAPH=$(spark 0 25 100 | awk '{print substr($0,4,3)}')
printf "%s" $GRAPH

我得到:

▂%

但看起来更像是:

角色外观

正如您所看到的,它%似乎位于黑条里面......

我怎样才能将其打印出来:

同一行中没有意外的%?

答案1

简短的回答是

printf "%s\n" $GRAPH

$(…)当您使用或将命令的输出捕获到 shell 变量中时`…`,最后一个换行符将被删除,并且printf "%s" …(与 不同echo)默认情况下不会添加换行符。因此,当您说 时printf "%s" $GRAPH,您将在与输出相同的行上获得下一个 shell 提示符printf

其次,我建议你将其改为

printf "%s\n" "$GRAPH"

以防止某些有趣的人物出现在$GRAPH——而且你显然得到了有趣的人物。

第三,你说,“%似乎在黑条里面”。这似乎是反向视频,其中前景色和背景色是反转的。这可能是由 中的一个或一些字符引起的$GRAPH。如果你直到时间结束所做的其他一切都是反向视频,即使你已经完成了上述两个步骤,请尝试

printf "%s\n" "$GRAPH"; tput sgr0

tput练习终端特定的功能;在许多情况下通过编写字符串。  sgr0是该功能的简称exit_attribute_mode,它将前景色和背景色恢复为正常(并关闭下划线、闪烁以及终端支持的任何其他显示属性)。

相关内容