2016-09-30 54 views
0

在Ubuntu-14.04,庆典-4.3.11,我运行此:使得bash的printf考虑数组作为一个参数

$ _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 
+2

如果你使用它双引号'[*]',它会扩展为单个参数。 'printf'%s bloup \ n“”$ {_ array [*]}“' – eckes

回答

2

只需使用*代替@

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

@的目的是使治疗扩张作为单独引用的话对于每个元素,以便像("a b" c d)这样的数组的扩展被视为3个参数,而不是4个。