在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表现为echo?
printf为什么把双引号数组看作三个参数?也就是说,这里缺少什么扩展机制?
作为一种解决方法,我使用这个:
$ _string=${_array[@]}
$ printf "%s bloup\n" "$_string"
1 2 3 bloup

最佳答案

*代替@

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

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

07-27 13:59