我想在漂亮的表格中打印一些文本。
举个例子:
{
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 上运行,那就加分!
编辑 :
我的输出(即列)的长度可能会因一些不同的因素而异,所以我更喜欢这样的解决方案,我不必手动指定要打印的空格数以使其看起来很漂亮。
最佳答案
echo
和 column
非常适合在命令行中破解。
pretty-print 的最佳实践通常涉及 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 将为所有参数回收。注意:多词元素必须被引用或转义它们的空格才能被单独处理
编辑:添加了 flexbile 最大长度
关于bash - 在 macOS 和 CentOS 上使用 'column -t',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56084828/