使bash printf将array视为一个参数



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

$ _array=(1 2 3)
$ echo "${_array[@]} bloup"
1 2 3 bloup
$ printf "%s bloupn" "${_array[@]}"
1 bloup
2 bloup
3 bloup
    在这种情况下,我如何使printf 行为作为echo ?为什么printf将双引号数组视为三个参数?也就是说,我在这里漏掉了什么膨胀机制?

作为一种变通方法,我使用如下:

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

*代替@:

printf "%s bloupn" "${_array[*]}"

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

最新更新