次のprintf
関数があります。
$ printf '%s %s %s\t%s\n' 100644 blob 8e1e f1.txt 100644 blob 9de7 f2.txt | git mktree
誰がそれが生み出すものとその理由を説明できますか?同じ数のフォーマットオプションがあると期待していました%s
は各引数文字列ですが、ここにはより多くの引数文字列があります。
この形式は、すべての引数を表示するために必要な回数だけ再利用されます。引数が少なすぎる場合、不足している引数は空の文字列として扱われます。
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
Man bashから:
この形式は、すべての引数を消費するために必要に応じて再利用されます。提供されているよりも多くの引数がフォーマットに必要な場合、追加のフォーマット指定は、ゼロ値またはnull文字列が適切に提供されたかのように動作します。戻り値は、成功した場合はゼロ、失敗した場合はゼロ以外です。