如何在 bash 中打印一些文本并用空格将其填充到一定宽度?

问题描述 投票:0回答:5

我在 bash 脚本中回显一些文本,其中包含一个变量,并且想要填充该变量,以便它始终在右侧有适当数量的空格以保持文本的其余部分对齐。

这是我想要的示例:

Echoing random number 1080    [ OK ]
Echoing random number 443     [ OK ]
Echoing random number 34842   [ OK ]

数值的长度会有所不同(可能不超过 5 或 6 位数字)。

我知道 printf 可以做到这一点,并通过执行以下操作右对齐变量:

printf "Echoing random number %5s   [ OK ]" $RAND_NUM

但是,这会将文本格式化为如下所示:

Echoing random number  1080   [ OK ]
Echoing random number   443   [ OK ]
Echoing random number 34842   [ OK ]

当然,仅仅与空格相呼应是行不通的:

echo "Echoing random number ${RAND_NUM}   [ OK ]"

产生这个:

Echoing random number 1080   [ OK ]
Echoing random number 443   [ OK ]
Echoing random number 34842   [ OK ]

有没有办法像我的第一个例子一样打印文本?

bash variables printing formatting printf
5个回答
82
投票

使用

-
左对齐字段。

printf "Echoing random number %-5s   [ OK ]" $RAND_NUM

或者,如果您使用的是 Red Hat Linux 系统,则有预定义的函数可以打印出绿色 OK 和红色 FAILED 提示(您在启动过程中看到的提示):

#!/bin/bash

. /etc/init.d/functions

echo -n "Frobbing widget:"
frob_widget && echo_success || echo_failure
echo

29
投票

将所有行收集在一个 var 或文本文件中,然后通过

column
命令进行管道传输。 所以这个(我的示例文件
/tmp/columns.txt

Echoing random number 1080 [ OK ]
Echoing random number 44332356 [ OK ]
Echoing random number 34842 [ OK ]
Echoing random number 342 [ OK ]

变成了这样

Echoing  random  number  1080      [  OK  ]
Echoing  random  number  44332356  [  OK  ]
Echoing  random  number  34842     [  OK  ]
Echoing  random  number  342       [  OK  ]

命令示例:

cat /tmp/columns.txt | column -t


6
投票

简单的标准 Bash 函数($1:要填充的字符串;$2:整数填充长度,左填充为正,右填充为负):

function pad () { [ "$#" -gt 1 ] && [ -n "$2" ] && printf "%$2.${2#-}s" "$1"; }

使用示例:

$ echo "!$(pad "foobar" 9)!"
!   foobar!
$ echo "!$(pad "foobar" -9)!"
!foobar   !
$ echo "!$(pad "foobar" 3)!"
!foo!

5
投票

扩展 sobi3ch 的答案:如果您使用分隔符连接字符串(我使用 tilda (~)),则可以使用 -s 参数调用 column 来在该点拆分文本。

对虐待猫科动物表示歉意:

foo.txt :

Echoing random number 1080~[ OK ]
Echoing random number 1080~[ OK ]
Echoing random number 1080~[ Failed ]

然后:

cat foo.txt | column -s'~'

Echoing random number 1080        [ OK ]
Echoing random number 1080        [ OK ]
Echoing random number 1080        [ Failed ]

0
投票
# Padding with spaces:

x_padded="    $x"
x_padded=${x_padded: -3}

# Padding with zeros:

x_padded="000$x"
x_padded=${x_padded: -3}
© www.soinside.com 2019 - 2024. All rights reserved.