我想在漂亮的表格中打印一些文本。 举个例子:
{
echo -e "\tIP address:-1.2.3.4"
echo -e "\tNetmask:-1.2.3.4"
echo -e "\tGateway:-1.2.3.4"
echo -e "\tDefault gateway:-1.2.3.4"
} | column -ts-
在macOS(对我而言为10.14.4)上,此打印与我期望的一样:
IP address: 1.2.3.4
Netmask: 1.2.3.4
Gateway: 1.2.3.4
Default gateway: 1.2.3.4
但是,在CentOS(已在6和7上进行测试)上,它并不那么漂亮:
IP address: 1.2.3.4
Netmask: 1.2.3.4
Gateway: 1.2.3.4
Default gateway: 1.2.3.4
所以我的问题是:我应该有更好的方法吗?至少对于CentOS?
如果您能告诉我为什么可以在macOS上运行但不能在CentOS上运行,则奖励积分!
修改:
我的输出(即列)的长度可能会有所不同,具体取决于一些不同的因素,因此,我希望使用一种无需手动指定要打印的空格数以使其看起来漂亮的解决方案。
答案 0 :(得分:0)
echo
和column
非常适合在命令行中使用。
最佳实践中,漂亮的打印通常涉及printf
:
IPv4=('IP address:' 1.2.3.4 Netmask: 1.2.3.4 Gateway: 1.2.3.4 Default\ gateway: 1.2.3.4)
ip=; for ip in "${IPv4[@]}"; do ((${#ip} > max)) && max=${#ip}; done
printf "\t%-$((max+2))s%s\n" "${IPv4[@]}"
\t%-18s%s\n
的意思是“文字标签,字符串填充为18个字符,字符串,换行符”。它包含两个参数说明符%x
,bash将为所有参数循环使用。
注意:多词元素必须加引号或转义其空格,以便将其单独对待
编辑:添加了灵活的最大长度