我在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 ]
有没有办法像我的第一个例子那样打印文本?
答案 0 :(得分:54)
使用-
左对齐字段。
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
答案 1 :(得分:4)
将所有行收集到一个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
答案 2 :(得分:0)
要扩展sobi3ch的答案:如果用分隔符连接字符串(我使用tilda(〜)),则可以在该点调用带有-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 ]