如何解决“ echo -e”的转义序列无法按预期工作
我在bash脚本中有以下2条echo命令:
echo -e "\\033[1;36m" hi there "\033[0m" # Diagnostic
echo "$escape" "$msg" "\033[0m" # -e left out
第一行是一个简单的健全性测试,它工作正常,并以粗体青色显示“ hi there”。
在-e插入“ $ escape”之前,第二行不起作用。我将-e排除在第二个回显之外,以查看$ escape的值。这是我从每个回声中得到的:
hi there # In bold cyan
\\033[1;36m hi there \033[0m
这是问题所在: 当我将输出的第二行复制并粘贴到我的终端上时,在添加双引号后可以正常工作:
echo -e "\\033[1;36m" hi there "\033[0m"
但是当我在脚本中添加-e时,会使用默认的终端颜色(白色)。顺便说一句,我确实尝试在脚本中的$ escape字符串定义两边加上双引号,认为这是脱壳字符的外壳,但这没用。
我的大脑将爆炸-:-) TIA。
解决方法
正如上面的其他人指出的那样,您的转义代码有两个反斜杠。这是颜色代码的完整列表-https://misc.flogisoft.com/bash/tip_colors_and_formatting
同样,echo
仅打印参数,后跟行尾字符。 printf
允许格式化字符串。
尝试一下:
printf '\033[1;36m%s\033[0m\n' "Hello"
。
这将为您提供所需的结果。
您应该考虑使用tput而不是对值进行硬编码
cyan=$(tput setaf 6)
bold=$(tput bold)
sgr0=$(tput sgr0)
printf '%s%s%s\n' "${bold}${cyan}" "hello" "${sgr0}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。