2016-09-30 51 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個。