printf左对齐和右对齐通过改变space分隔符得到不截断的定长字符串

Printf left align and right align to obtain a fixed length string without truncation by varying space separators

我想使用三个变量(代码、参数、值)从 Bash printf 获得以下输出:

[OK] Percentage:                 100%
[OK] Ping time:                  31ms
[OK] Memory usage:                7MB
[KO] Main Drive Temperature:    104°C
[OK] Uptime:               4d 22h 32m

Space 在参数 1 和 2 之间是一个 space 因为 1 总是四个字符长,而 space 在 2 和 3 之间变化 使总长度等于37(任意数)。没有参数或值的截断,如果它们的总和超过 37,我只是指定一个更大的数字作为总字符串长度,也适用于所有其他行。

这在大多数情况下都能完成工作,但并不完美:

printf '%s %-20s %11s\n' "" "" ""

您拥有所有具有长度的字符串。拿一张纸,画出来。例如:

[OK] |--------------------------------|  the whole space
                                 |----|  trailing part
     |---------------------------|       initial part = the whole space - trailing part

 width=40
 printf "%s %-*s%s\n" "[OK]" "$((width - ${#3}))" "" ""