Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中打印一些文本,并将其填充到一定宽度的空格?_Bash_Variables_Printing_Formatting_Printf - Fatal编程技术网

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

如何在bash中打印一些文本,并将其填充到一定宽度的空格?,bash,variables,printing,formatting,printf,Bash,Variables,Printing,Formatting,Printf,我在一个bash脚本中回显一些文本,其中包含一个变量,并希望填充该变量,使其始终在右侧有适当的空格数,以保持其余文本对齐 下面是我想要的一个例子: Echoing random number 1080 [ OK ] Echoing random number 443 [ OK ] Echoing random number 34842 [ OK ] 数值的长度可能不同(可能不超过5或6位) 我知道printf可以做到这一点,并通过执行以下操作右对齐变量: printf "Ec

我在一个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 ]

有没有像我的第一个示例那样打印文本的方法?

使用
-
左对齐字段

printf "Echoing random number %-5s   [ OK ]" $RAND_NUM
或者,如果您使用的是Red Hat Linux系统,则会有一些预定义的函数,这些函数将打印出绿色的“确定”和红色的“失败”提示(您在引导过程中看到的提示):


将所有行收集到一个var或文本文件中,然后通过
命令进行传输。 这就是(我的示例文件
/tmp/columns.txt

变成这样

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

展开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 ]

您能否在redhat中添加指向这些ok/failed函数定义的链接?@user35186请参阅您系统上的
/lib/lsb/init functions
,这是脚本的现代跨发行版。如果你有它,你可以使用
log\u success\u msg
log\u failure\u msg
,和
log\u warning\u msg
。如果你用一个消除器(我使用tilda(~)来处理字符串,你可以用-s参数调用列来分割该字符上的列。例如:echo“echooning random number 1080~[OK]\n选择random number 1080~[OK]”| column-s'~'给出了echooning random number 1080[OK]如果你不想被指控患有糖尿病,那么就这样做:
column-s'~'
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 ]