【问题标题】:Bash: Reuse printf variables in outputBash:在输出中重用 printf 变量
【发布时间】:2021-04-25 03:50:49
【问题描述】:

是否可以在格式化中多次使用传递给printf 的变量?

例如,用这一行:

printf 'Hi %s, welcome to %s. %s is a great place to work. Thanks %s.' "John" "The Icecream Factory"

如何“重用”printf 中的第一个和第二个变量?

我在想这样的事情:

printf 'Hi %s[1], welcome to %s[2]. %s[1] is a great place to work. Thanks %s[2].' "John" "The Icecream Factory"

...但显然不是这样。

期望的输出

Hi John, welcome to The Icecream Factory. The Icecream Factory is a great place to work. Thanks John.

实际输出

Hi John, welcome to The Icecream Factory.  is a great place to work. Thanks .

工作环境是 Ubuntu 20 中的bash

【问题讨论】:

  • 我不相信printf 格式字符支持这一点。您必须使用%s 的原因是什么?定义变量更容易,可以在字符串中多次使用,例如n="John"; f="The Icecream Factory"; printf "Hi $n, welcome to $f. $f is a great place to work. Thanks $n."
  • 是的,这很好用,但有人告诉我在printf 格式字符串中使用变量是不好的做法:github.com/koalaman/shellcheck/wiki/SC2059

标签: bash variables printf


【解决方案1】:

虽然我认为不可能使用 printf 的内置 bash 实现或独立的 GNU printf(1) 程序,但如果您可以定位 zsh,它的 printf 版本支持POSIX 风格的 printf(3) 参数索引:

通常,转换规范按顺序应用于每个参数,但它们可以通过将% 替换为%n$ 并将* 替换为*n$ 来显式指定要使用的nth 参数。建议您不要将这种显式样式的引用与普通样式混合在一起,并且此类混合样式的处理可能会在未来发生变化。

$ printf 'Hi %1$s, welcome to %2$s. %2$s is a great place to work. Thanks %1$s.\n' "John" "The Icecream Factory"
Hi John, welcome to The Icecream Factory. The Icecream Factory is a great place to work. Thanks John.

【讨论】:

  • 如果它被添加到bash,它几乎肯定会使用相同的语法,fwiw。
猜你喜欢
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
相关资源
最近更新 更多