Leo*_*tiz 6 shell-script printf text-formatting
如何使用 修复输出宽度printf?
这是一个示例脚本:
#!/bin/bash
OK=$(printf '\t%+50s\n' OK)
FAIL=$(printf '\t%+50s\n' FAIL)
for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do
echo "$i $OK"
done
Run Code Online (Sandbox Code Playgroud)
输出:
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
Run Code Online (Sandbox Code Playgroud)
Joh*_*ofy 20
一个简单的方法:
将您的脚本通过管道传输到 column -t
$ script.sh | column -t
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
Run Code Online (Sandbox Code Playgroud)
Rom*_*est 19
Use the following printf approach to get the needed output:
#!/bin/bash
for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do
printf '%-50sOK\n' $i
done
Run Code Online (Sandbox Code Playgroud)
Script output:
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
Run Code Online (Sandbox Code Playgroud)
OK - as static string is moved to the FORMAT (printf FORMAT [ARGUMENT])
$i - considered as printf argument
You didn't use a tool that formats output and, as $i gets wider, your output fails to align.
Replace
echo "$i $OK"
Run Code Online (Sandbox Code Playgroud)
with
printf "%-50s %s\n" "$i" "$OK"
Run Code Online (Sandbox Code Playgroud)
(replace "foo" by actual string).
where
50s is a fixed width 50 char string,- (minus) left-justify the string.man 3 printf for details about the format string.| 归档时间: |
|
| 查看次数: |
22853 次 |
| 最近记录: |