我有以下printf
功能:
$ printf '%s %s %s\t%s\n' 100644 blob 8e1e f1.txt 100644 blob 9de7 f2.txt | git mktree
谁能解释一下它会产生什么以及为什么?我希望每个参数字符串都有相同数量的格式选项%s
,但这里有更多的参数字符串。
答案1
该格式可根据需要多次重复使用以显示所有参数。如果参数太少,则缺少的参数将被视为空字符串。
例子
以下是指定两个参数但只提供一个的格式示例:
$ printf '%s ; %s ;\n' a
a ; ;
这是相同的格式,这次提供了太多参数:
$ printf '%s ; %s ;\n' a b c
a ; b ;
c ; ;
以下是问题中的示例,其中格式需要四个参数。由于提供了八个参数,整个格式被使用两次:
$ 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:
根据需要重用该格式以消耗所有参数。如果格式需要的参数多于提供的参数,则额外的格式规范的行为就像已提供适当的零值或空字符串一样。成功时返回值为零,失败时返回非零。