2

我正在尝试在宽度未知的 bash 中与 printf 左对齐。

我该怎么做?

有点像这样,但这不起作用

max=<enter random number>
printf "%-${max}s|", "Instance"

重点是下面的实例将是一个未知长度,它的长度可以是动态的。

示例输入

max=10

示例输出

Instance  |

示例输入 2

max=12

示例输出 2

Instance    |
4

2 回答 2

3

您可以使用一个*长度:

for ((max=8;max<15;max++)); do
    printf "%-*s|\n" ${max} "Instance"
done

结果:

Instance|
Instance |
Instance  |
Instance   |
Instance    |
Instance     |
Instance      |
于 2020-03-31T21:48:35.713 回答
2

我想你正在尝试打印一张桌子。我想你printf一个人做不到。这基本上需要您的行输出命令来预测未来的输出。

但是,如果您可以容忍后处理,则可以使用column命令简单地进行。只需选择一个您想用填充替换的字符,然后按照以下示例进行操作(我选择了反斜杠\):

printf "%s\\|\n" "Instance" "Linstance" "Mintinginstance" | column -ts'\'

输出:

Instance         |
Linstance        |
Mintinginstance  |
于 2020-03-31T21:27:52.640 回答