【问题标题】:How to represent formatted printf using echo in bash [closed]如何在 bash 中使用 echo 表示格式化的 printf [关闭]
【发布时间】:2021-09-30 00:04:12
【问题描述】:

在 bash 中产生与格式化 printf 相同输出的命令是什么

【问题讨论】:

  • 为什么你“需要避免使用printf”?
  • 恰恰相反,你应该使用printf来避免使用echo。
  • printf 自动循环,直到所有参数都用完。您是否也必须模仿这种行为?
  • @diggusbiccus 不,你没有。您可以使用-e(或者您可以设置必要的选项以使echo 以符合POSIX 的方式运行)。 $'...' 对于定义其他竞赛中使用的字符串更有用,例如不进行自身转义处理的命令的赋值和参数。
  • 您的printf 命令提供了格式但没有相应的参数。我们是否应该假设您想要一些可以提供给定命令将容纳的三个附加参数的东西?

标签: linux bash printf echo formatted-text


【解决方案1】:

如果您的系统上的echo 支持-ne,那么您可以定义一个类似...的函数

$ puts(){(echo -ne "sometext ${1}\t ${2}\n ${3}\n")}
$ puts hello world bye
sometext hello   world
 bye

( 输入一个 bash )

对于循环遍历参数列表,这是可能的......

puts(){
for string in ${@}; do
 echo -ne ${string}
done
}

比你能做的...

puts 0 1 "\n" 3 "\t" 4 5 6 "\n" 7 8 9 "\n"

【讨论】:

  • 请注意这里不需要子shell ( )。但是如果你去掉这些括号,大括号周围的分号和空格是必需的→puts() { echo -ne "…"; }
  • 请注意,这不是 100% 等效的。 echo -e "$1" 也解释 $1 内部的转义序列,而 printf %s\\n "$1" 没有。此外,printf 会循环直到所有参数都被消耗完。
  • @Socowi - 当\n 用第二个反斜杠转义时,echo -n "sometext\\n" 也会输出\n 而不是换行符。而echo -n 的意思是:不要自动添加换行符,也不要解释\n 或\t。自己试试吧。我通常使用echo -n >filename 来清空文件而不添加换行符。所以文件是空的,大小正好为 0 字节。所以-ne 的意思是:解释\n 和/或\t,但不要自动添加换行符。
  • 这根本不是我的意思。我使用了一个简化的命令和一个一般案例来进行说明。似乎这适得其反,所以这里有一个具体的例子(使用更传统的引用风格。我想你也误解了\\n):比较puts '\n' 2 3 4 5 6和printf 'sometext %s \t %s\n %s\n' '\n' 2 3 4 5 6。
  • 好的。我明白并同意。我通过参数列表对我的帖子进行了增强。但有一件事是:不要使用单引号;-)
猜你喜欢
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多