$ printf "%s" a b
ab$ printf "%s%s" a b
ab
Run Code Online (Sandbox Code Playgroud)
我在理解printf
. 如果我是对的,它与 C 编程语言中的字符串大致相同。
为什么格式说明符%s
将以下两个字符串连接在一起?
为什么不 %s
意味着只有一个字符串来替代它,而忽略剩余的字符串?
为什么两个字符串下%s
和下%s%s
的结果相同?
Ste*_*itt 14
该格式的操作应视需要经常重复使用,以满足参数操作数。任何额外的 b、c 或 s 转换说明符都应像提供空字符串参数一样进行评估;其他额外的转换规范应该被评估,就像提供了一个零参数一样。如果格式操作数不包含转换规范并且存在参数操作数,则结果未指定。
在您的情况下,%s
格式会根据需要重复多次以处理所有参数。
printf "%s" a b
Run Code Online (Sandbox Code Playgroud)
和
printf "%s%s" a b
Run Code Online (Sandbox Code Playgroud)
产生相同的结果,因为在第一种情况下,%s
重复两次,相当于%s%s
。
如果您提供的参数printf
多于格式字符串的预期,则格式字符串将重复。
例如
$ printf "%s -- %s" a b c d e
a -- bc -- de --
Run Code Online (Sandbox Code Playgroud)
我们可以看到%s -- %s
格式被有效地重复了。
这很有用;例如用于格式化
$ printf "%s -- %s\n" a b c d e
a -- b
c -- d
e --
Run Code Online (Sandbox Code Playgroud)