如何在 motd 中获得正确的字符串长度?

How to get correct length of string in motd?

我是 bash 脚本的新手。我在我的服务器机器上制作了我原来的 motd 脚本 (ubuntu 20.04)。在该脚本中,我试图获取一段字符串。它在服务器机器上正常工作。但是,当我使用 ssh 从笔记本电脑(OSX 11.1 和 ubuntu 20.04)连接到服务器计算机时,它显示了错误的号码。你能告诉我为什么会这样吗?

</etc/update-motd.d/my-motd>

#!/bin/bash
line1="██╗"
printf "${#line1}"

它会 return 9 但它应该 3... 另外,这个问题只发生在ssh登录。

最佳,

在您的示例中,有一个 Unicode 字符。根据 POSIX,shell 应该支持 Unicode,但必须使用适当的变量打开它。

因此,您称为“笔记本电脑”的机器或您连接的帐户未配置为支持 utf-8 的语言环境。尝试至少设置 LC_CTYPE=UTF-8,但设置为正确的语言环境(甚至可能是 LANG 或 LC_ALL)变量会更好。

有关所谓的国际化变量的详细信息,请参阅:https://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html(TL;DR:LANG 为未设置的变量设置默认值,LC_ 允许一些粒度,LC_ALL 是老板。)