printf %s%s one two
打印onetwo
但我想要oneonetwotwo
我怎样才能做到这一点?
答案1
在 zsh 中:
printf '%1$s%1$s' one two
除了它使用第 n 个参数而不是像GNU libc 的 1那样的下一个参数(但不在独立的 GNU实用程序中,也不是在 GNU shell (bash) 的内置函数中)之外,它%n$s
是类似的。%s
printf()
printf
printf
那2001年被添加到zsh并且也可以在其他一些printf
实现中使用,尽管有一些变化和将在下一版本的 POSIX 标准中指定
请注意,虽然printf '%s%1$s' one two
在 zsh 中也可以工作,但它并不适用于所有printf
支持的实现,并且如果混合使用%n$x
指令和不使用指令,则 POSIX 将使行为未指定。n$
另一种选择是使用数组压缩运算符,例如在匿名函数中:
(){ printf %s%s ${argv:^argv}; } one two
其中 zip$argv
与其自身一起导致被one
one
two
two
传递到printf
.像往常一样,更改为"${(@)argv:^argv}"
或"${@:^argv}"
保留 any 中的空元素。
该%$nX
语法printf()
是 POSIX,可能起源于 SVR4(是在 SVR4,而不是 SVR3),可能来自nl_printf()
早期用于消息本地化的消息,其中消息中元素的顺序可能从一种语言更改为另一种语言。