有人可以帮我理解printf的对齐功能。我曾尝试阅读有关Stack和Google常规结果的几个示例,但我仍然无法理解其语法。这基本上就是我想要实现的目标:
HOLDING 1.1.1.1 Hostname Potential outage!
SKIPPING 1:1:1:1:1:1:1:1 Hostname Existing outage!
对不起,我知道这比我常见的问题更多。我真的不知道如何从这里开始。我曾尝试在过去使用echo -e“\ t”,它适用于水平放置,但不能对齐。我还使用for循环合并了一个更复杂的tcup解决方案,但在这种情况下这不会很容易。
我刚刚发现了printf的功能,看起来它会做我需要的,但我不懂语法。也许是这样的?
A="HOLDING"
B="1.1.1.1"
C="Hostname"
D="Potential outage"
for (( j=1; j<=10; j++ )); do
printf "%-10s" $A $B $C $D
echo "\n"
done
这些变量将从数据库中输入。我还是不太了解printf语法吗?请帮忙
* ALSO *
非主题提问,您有什么回应的动机?我很擅长堆叠交换。除了声誉之外,你们中的一些人能从中得到任何东西。职业2.0?或者是其他东西?有些人在这个网站上有荒谬的统计数据。只是好奇驱动器是什么。
答案 0 :(得分:2)
字符串%-10s
可以分为多个部分:
%
引入了转换说明符,即如何格式化参数-
指定该字段应保持对齐。10
指定字段宽度s
指定数据类型string。 Bash printf
格式字符串模仿C库函数printf(3)
的字符串,man 3 printf
中描述了此部分。
此外,当给出比转换说明符更多的参数时,Bash printf
将为每个参数多次打印字符串,因此printf "%-10s" foo bar
等同于printf "%-10s" foo; printf "%-10s" bar
。这是允许您在同一命令上指定所有参数的原因,%-10s
适用于每个参数。
至于人们的动机,你可以试试meta site,这是关于stackoverflow本身的问题。