特定宽度的文本格式

text formating to specific width

我写了一个脚本来显示我的带有 polybar 的笔记本的加速和减速。我 运行 遇到的问题是将 echo 的输出放入 formation.

ATM 我的输出看起来像这样(bash 终端中的脚本循环)...

WLAN0: ⬇️ 14 MiB/s ⬆️ 16 KiB/s
WLAN0: ⬇️ 60 B/s ⬆️ 0 B/s
WLAN0: ⬇️ 120 B/s ⬆️ 120 B/s

但我想把它排成一行,像这样...

WLAN0: ⬇️ 14 MiB/s  ⬆️ 16 KiB/s
WLAN0: ⬇️ 60 B/s    ⬆️ 0 B/s
WLAN0: ⬇️ 120 B/s   ⬆️ 120 B/s

我的代码的本质是以下简化的行...

echo "yada: ⬇️ $string1 ⬆️ $string2"

变量包括数字和文本(最多 10 个字符),具体取决于传输速度。

所以两个emoji之间至少应该有12个静态字段。 但我不知道如何,我希望你能向我解释如何格式化某种变量宽度,我假设 printf

左对齐 printf:

string1="14 MiB/s"; string2="16 KiB/s"
printf "yada: ⬇️ %-12s ⬆️ %-12s\n" "$string1" "$string2"

输出:

yada: ⬇️ 14 MiB/s ⬆️ 16 KiB/s

这里是对齐列的方法:

#!/usr/bin/env bash

dnIcon=$'247707'
upIcon=$'246707'

nMiBs=14
sMiBs="$nMiBs MiB/s"

nKiBs=16
sKiBs="$nKiBs KiB/s"

printf 'WLAN0: %s  %-10s  %s  %-10s\n' "$dnIcon" "$sMiBs" "$upIcon" "$sKiBs"

示例输出:

WLAN0: ⬇️  14 MiB/s    ⬆️  16 KiB/s