![Bash 脚本在我的变量中打印了错误的字符](https://linux22.com/image/1352079/Bash%20%E8%84%9A%E6%9C%AC%E5%9C%A8%E6%88%91%E7%9A%84%E5%8F%98%E9%87%8F%E4%B8%AD%E6%89%93%E5%8D%B0%E4%BA%86%E9%94%99%E8%AF%AF%E7%9A%84%E5%AD%97%E7%AC%A6.png)
我正在终端中尝试以下操作:
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
,它将前景色和背景色恢复为正常(并关闭下划线、闪烁以及终端支持的任何其他显示属性)。