Porcupine Asked: 2024-05-09 23:38:11 +0800 CST2024-05-09 23:38:11 +0800 CST 2024-05-09 23:38:11 +0800 CST printf - 将格式化的字符串输出存储在变量中 772 而不是以下内容 printf '%s\t%s\t%s\t%s\n' 'index' 'podcast' 'website' 'YouTube' 我想将 printf 输出存储在 Results 变量中,我该怎么做? bash 1 个回答 Voted Best Answer Paul_Pedant 2024-05-10T00:16:30+08:002024-05-10T00:16:30+08:00 Bash(自 3.1 起)、zsh(自 5.3 起)和 ksh93(自 v- 和 u+m 2021-11-28 起)具有“变量赋值选项” printf: $ Row='%s\t%s\t%s\t%s\n' $ printf -v Result -- "${Row}" 'index' 'podcast' 'website' 'YouTube' $ echo "${Result}" index podcast website YouTube $ 请注意,我得到了两个换行符 - 一个来自printf格式,另一个来自echo. 您还可以使用类似每个字段的方法来控制列宽$-10s,而不是制表符。 $( ... )与or语法相比,除了保留尾随换行符之外,它的优点`back-quote`还在于它不需要运行子 shell 来进行赋值,这在 ksh93 之外的 shell 中成本相对较高。 1 在 ksh93 中,它的成本较低,因为它不涉及分叉,但通过替换的形式可以使其成本更低${ printf...; }。5.2.x 之后的下一版本的 bash 以及 5.9.x 之后的下一版本的 zsh 以及${|...}mksh 的变体将支持该功能
Bash(自 3.1 起)、zsh(自 5.3 起)和 ksh93(自 v- 和 u+m 2021-11-28 起)具有“变量赋值选项”
printf
:请注意,我得到了两个换行符 - 一个来自
printf
格式,另一个来自echo
.您还可以使用类似每个字段的方法来控制列宽
$-10s
,而不是制表符。$( ... )
与or语法相比,除了保留尾随换行符之外,它的优点`back-quote`
还在于它不需要运行子 shell 来进行赋值,这在 ksh93 之外的 shell 中成本相对较高。1 在 ksh93 中,它的成本较低,因为它不涉及分叉,但通过替换的形式可以使其成本更低
${ printf...; }
。5.2.x 之后的下一版本的 bash 以及 5.9.x 之后的下一版本的 zsh 以及${|...}
mksh 的变体将支持该功能