1

スクリプトの出力を適切に表示するために、BASH スクリプトに次の printf ステートメントがあります。

printf "%-20s %-25s %-5s %-10s %-20s \n" $hostn $kernl $uptim $owner $team

これからの出力は次のとおりです。

Hostname1        2.6.32.12-0.7-default     307   Lastname, Firstname
Team1
Hostname2        2.6.32.12-0.7-default     270   Lastname, Firstname
Team1
Hostname3        2.6.32.12-0.7-default     298   Lastname, Firstname
Team1
Hostname4        2.6.32.12-0.7-default     271   Lastname, Firstname
Team2

チームが新しいラインに追加されている理由がわかりません。別のフィールドを追加しようとしましたが、同じことを行います:

printf "%-20s %-25s %-5s %-10s %-20s %s\n" $hostn $kernl $uptim $owner $team "test"

Hostname1        2.6.32.12-0.7-default     307   Lastname, Firstname         Team1
test
Hostname2        2.6.32.12-0.7-default     270   Lastname, Firstname         Team1
test
Hostname3        2.6.32.12-0.7-default     298   Lastname, Firstname         Team1
test
Hostname4        2.6.32.12-0.7-default     271   Lastname, Firstname         Team2
test

これらの改行はどこから来たのですか? 私のprintfフォーマットは間違っていますか?

4

1 に答える 1

3

シェルスクリプトを作成するときは、必ず拡張を引用してください(特に理由がない限り、すべて引用してください)。

printf "%-20s %-25s %-5s %-10s %-20s %s\n" \
       "$hostn" "$kernl" "$uptim" "$owner" "$team" "test"

$owner空白を含めることができるため、正しく引用しないと、名前がフィールド$teamに滑り込む可能性があります。そうしないと、次の行のを意味するtest別のフィールドとして表示されます。%-20s$hostn

于 2013-03-12T14:51:26.570 に答える