theonlygusti Asked: 2023-05-04 05:02:31 +0800 CST2023-05-04 05:02:31 +0800 CST 2023-05-04 05:02:31 +0800 CST 如何在 shell 中的 printf 中两次使用参数? 772 printf %s%s one two印刷品onetwo,但我想oneonetwotwo 我怎样才能做到这一点? shell 1 个回答 Voted Best Answer Stéphane Chazelas 2023-05-04T05:12:26+08:002023-05-04T05:12:26+08:00 在 zsh 中: printf '%1$s%1$s' one two 除了%n$s它%s使用第 n个参数而不是像printf()GNU libc 的 ¹ 那样的下一个参数(但不在独立的 GNUprintf实用程序中,也不在printfGNU shell (bash) 的内置函数中)。 它于 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()早期用于消息本地化的消息,其中消息中元素的顺序可能会从一种语言更改为另一种语言。
在 zsh 中:
除了
%n$s
它%s
使用第 n个参数而不是像printf()
GNU libc 的 ¹ 那样的下一个参数(但不在独立的 GNUprintf
实用程序中,也不在printf
GNU shell (bash) 的内置函数中)。它于 2001 年添加到 zsh,并且在一些其他
printf
实现中也可用,尽管有一些变化,并将在下一版本的 POSIX 标准中指定请注意,虽然
printf '%s%1$s' one two
也可以在 zsh 中工作,但它并非在所有printf
支持的实现中都支持,如果混合%n$x
使用带和不带指令,则 POSIX 将使行为未指定。n$
另一种选择是使用数组压缩运算符,例如在匿名函数中:
其中 zip
$argv
本身导致one
one
two
two
被传递给printf
. 像往常一样,更改为"${(@)argv:^argv}"
或"${@:^argv}"
以保留 any 中的空元素。该
%$nX
语法printf()
是 POSIX,可能起源于 SVR4(是 SVR4,而不是 SVR3),可能来自nl_printf()
早期用于消息本地化的消息,其中消息中元素的顺序可能会从一种语言更改为另一种语言。