如何避免在Bash`printf`中使用空数组打印任何内容?

我经常使用这样的快捷方式打印出数组的内容printf

$ printf "%sn" "${my_array[@]}"
$ printf "%s" "${my_array[@]}"

这在一般情况下效果很好:

$ my_array=(limburger stilton wensleydale)
$ printf "%sn" "${my_array[@]}"
limburger
stilton
wensleydale
$

效果很好,但是当数组为空时,它仍然输出单个字符(换行符或空字节):

$ my_array=()
$ printf "%sn" "${my_array[@]}"

$

当然,我可以通过首先测试一个空数组来避免这种情况:

$ [[ ${#my_array[@]} -gt 0 ]] && printf "%sn" "${my_array[@]}"
$ (( ${#my_array[@]} )) && printf "%sn" "${my_array[@]}"

但是我一直在使用这个习语,并且希望它尽可能短。有没有更好(更短)的解决方案,也许是不同的printf格式,它根本不会用空数组打印任何内容?

回答

Bash 的参数扩展可能有帮助:

printf "%b" "${my_array[@]/%/n}"

来自help printf

%b: 在相应的参数中展开反斜杠转义序列

或者

printf "%s" "${my_array[@]/%/$'n'}"


以上是如何避免在Bash`printf`中使用空数组打印任何内容?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>