make bash printf将array视为一个参数

时间:2016-09-30 21:52:24

标签: linux bash

在ubuntu-14.04,bash-4.3.11上,我运行了这个:

$ _array=(1 2 3)
$ echo "${_array[@]} bloup"
1 2 3 bloup
$ printf "%s bloup\n" "${_array[@]}"
1 bloup
2 bloup
3 bloup
  • 在这种情况下,如何将printf 表现为作为回声?
  • 为什么printf将双引号数组视为三个参数?即我在这里失去了什么扩张机制?

作为一种解决方法,我使用它:

$ _string=${_array[@]}
$ printf "%s bloup\n" "$_string"
1 2 3 bloup

1 个答案:

答案 0 :(得分:2)

只需使用*代替@

printf "%s bloup\n" "${_array[*]}"

@的目的是将扩展视为每个元素的单独引用的单词,以便像("a b" c d)这样的数组的扩展被视为3个参数,而不是4。