固定出力幅の使い方は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
答え1
簡単な方法:
スクリプトをパイプで接続します。column -t
$ script.sh | column -t
a OK
aa OK
aaa OK
aaaa OK
aaaaaa OK
aaaaaaaaaaaaaaaaa OK
aaaaaaaaaaaaaaaaaaaaaaaaaa OK
答え2
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
- 静的文字列を次の位置に移動するとき滞在(printf FORMAT [ARGUMENT]
)$i
-printf
引数として扱われる
答え3
出力形式を指定するツールを使用しておらず、$i
幅が増えるにつれて出力は整列しません。
変える
echo "$i $OK"
そして
printf "%-50s %s\n" "$i" "$OK"
(「foo」を実際の文字列に置き換えます)。
どこ
50s
固定幅50文字の文字列です。-
(マイナス記号)は文字列を左揃えにします。man 3 printf
フォーマット文字列の詳細についてはを参照してください。