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}))" "" ""
我想使用三个变量(代码、参数、值)从 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}))" "" ""