bash - printf 返回多个副本
问题描述
在 OSX High Sierra 上,bash 的printf
行为似乎是错误的。考虑:
printf "[%s]" "x"
返回
[X]
一切都很好......但是:
printf "[%s]" "x" "y"
返回
[x][y]
而不仅仅是 [x] !!
不要告诉我:不要提供更多参数。我不知道传递给我的格式会是什么样子,但我有参数
文档没有直接解决这个问题,只是说明:
格式字符串会根据需要经常重复使用以满足参数。使用零或空字符串评估任何额外的格式规范。
这是坏了吗?
解决方案
- 格式操作数应尽可能频繁地重用以满足参数操作数。
这恰好意味着格式字符串会重复多次,它需要遍历所有参数。这正是它的预期工作方式,这是 printf 最有用的功能之一。
你想重复一个字符'#' 10 次?没有更简单的:
printf "#%.0s" $(seq 10)
# will expand to:
printf "#%.0s" 1 2 3 4 5 6 7 8 9 10
# is equivalent to:
printf "#%.0s#%.0s#%.0s#%.0s#%.0s#%.0s#%.0s#%.0s#%.0s#%.0s" 1 2 3 4 5 6 7 8 9 10
将从字符串中打印零字符,因此%.0s
它将打印零字符,因此它将..不打印任何内容。因此,#
重复的次数与存在的参数一样多。
您有一个数组并想打印用换行符分隔的所有数组成员?没有更简单的:
arr=(1 2 3 value1 test5 text7)
printf "%s\n" "${arr[@]}"
推荐阅读
- python - 参数“name”转换为“int”失败
- flutter - 在我的块中,它不会再次重新渲染
- java - Spring存储库saveAll为映射实体插入重复行
- javascript - 放大@key指令并反应原生
- angular - 离子角实现 ZLib
- pandas - Plotly 和 pandas groupby
- spring - 没有启动器的 Spring、Camel、ActiveMQ
- javascript - 有没有办法在 HTML5 中制作不可复制的文本?
- android - 在android RecyclerView中同时设置两个项目的颜色
- reactjs - WebView中的触发函数onPause和onPlay如何反应原生