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
出力:
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
私は次のようなものが欲しい:
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
簡単な方法:
スクリプトをcolumn -t
にパイプします
$ script.sh | column -t
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
次のprintf
アプローチを使用して、必要な出力を取得します。
#!/bin/bash
for i in a aa aaa aaaa aaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa; do
printf '%-50sOK\n' $i
done
スクリプト出力:
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
OK
-静的文字列が[〜#〜] format [〜#〜](printf FORMAT [ARGUMENT]
)
$i
-printf
引数と見なされます
出力をフォーマットするツールを使用せず、$i
が広くなると、出力の調整に失敗します。
交換する
echo "$i $OK"
と
printf "%-50s %s\n" "$i" "$OK"
(「foo」を実際の文字列に置き換えます)。
どこ
50s
は、固定幅の50文字の文字列です。-
(マイナス)文字列を左揃えにします。man 3 printf
形式文字列の詳細については。