スペースで区切られた複数のパラメータを持つprintfの仕組み

スペースで区切られた複数のパラメータを持つprintfの仕組み

私は次のprintf機能を持っています:

$ printf '%s %s %s\t%s\n' 100644 blob 8e1e f1.txt 100644 blob 9de7 f2.txt | git mktree

誰でもそれが生産するものとその理由を説明できますか?各パラメータ文字列には同じ数の書式オプションがありますが、これには%sより多くのパラメータ文字列があります。

ベストアンサー1

この形式は、すべてのパラメータを表示するのに必要な数だけ再利用できます。引数が少なすぎると、欠落している引数は空の文字列として扱われます。

はい

以下は、2つのパラメータを指定しますが、1つだけを提供する形式の例です。

$ printf '%s ; %s ;\n' a
a ;  ;

以下は同じ形式です。今回はあまりにも多くのパラメータが提供されます。

$ printf '%s ; %s ;\n' a b c
a ; b ;
c ;  ;

以下は、フォーマットに4つのパラメータが必要な質問の例です。 8つのパラメータが提供されるため、完全な形式が2回使用されます。

$ printf '%s %s %s\t%s\n' 100644 blob 8e1e f1.txt 100644 blob 9de7 f2.txt
100644 blob 8e1e        f1.txt
100644 blob 9de7        f2.txt

文書

メンズバッシュから:

すべてのパラメータを使用するには、必要に応じてフォーマットを再利用してください。書式に指定されたよりも多くの引数が必要な場合、追加の書式指定は、適切なゼロ値または空の文字列が指定されたかのように動作します。戻り値は成功した場合は0、失敗した場合は0ではありません。

おすすめ記事