$ printf "%s" a b
ab$ printf "%s%s" a b
ab
我在理解 的格式说明符时遇到一些问题printf
。如果我是正确的,它与 C 编程语言中的字符串基本相同。
为什么格式说明符%s
将以下两个字符串连接在一起?
为什么 %s
不表示只有一个字符串来替换它,而忽略剩余的字符串呢?
%s
为什么两个字符串 under和 under 的结果%s%s
相同?
答案1
那是指定如何printf
行为:
这格式操作数应根据需要重复使用以满足争论操作数。任何额外的 b、c 或 s 转换说明符都应按照提供空字符串参数的方式进行计算;其他额外的转换规范应像提供零参数一样进行评估。如果格式操作数不包含转换规范并且争论存在操作数,但结果未指定。
在您的情况下,该%s
格式会根据需要重复多次以处理所有参数。
printf "%s" a b
和
printf "%s%s" a b
产生相同的结果,因为在第一种情况下%s
重复两次,相当于%s%s
。
答案2
如果您提供的参数多于printf
格式字符串预期的参数,则格式字符串将重复。
例如
$ printf "%s -- %s" a b c d e
a -- bc -- de --
我们可以看到%s -- %s
格式被有效地重复了。
这可能很有用;例如用于格式化
$ printf "%s -- %s\n" a b c d e
a -- b
c -- d
e --