我的 Bash 脚本用于printf
打印应用格式的其他一些命令的输出,方式如下(注意两个前导空格):
printf " %-16s %s\n" "foo:" "$(bar)"
两个前导空格在那里,因为文件中的第一行是注释,我喜欢保持对齐:
# foo
foo: bar
foo: bar
...
这对于具有单行输出的命令非常有效。但是,当输出是多行时,输出会丢失后续行的格式。
例如:
printf " %-16s %s\n" "Contents:" "$(ls -a)"
结果是这样的:
Contents: .
..
foo
bar
相反,我想要实现的是多行输出,每行都被格式化(如果你喜欢,在列中),看起来像这样(注意后续行中缺少“标题”):
Contents: .
..
foo
bar
到目前为止,我的理解是,printf
使用两个参数(第一个是字符串,另一个是给定命令的结果)将第二个参数视为单个字符串,其中可以包含换行符。因此,根据我的要求,输出实际上是正确格式化的,printf
但这不是我想要的。
我知道一些与解析命令输出相关的陷阱,例如ls
,这耗尽了我目前解决这个问题的可能性。此外,这可能printf
不是执行此操作的最佳工具。
如果无法解决此问题,我正在考虑将多行字符串替换为逗号分隔列表,但这将是最后的手段。
实现我需要的格式的最佳方法是什么?
谢谢你的帮助。