2016-09-30 1 views
0

auf ubuntu-14.04 betrachten, bash-4.3.11, ich laufe dies:make bash printf Array als ein Argument

$ _array=(1 2 3) 
$ echo "${_array[@]} bloup" 
1 2 3 bloup 
$ printf "%s bloup\n" "${_array[@]}" 
1 bloup 
2 bloup 
3 bloup 
  • Wie kann ich printf machen behave als Echo in dieser Situation?
  • Warum berücksichtigt printf das doppelt zitierte Array als drei Argumente? d. h. welcher Expansionsmechanismus fehlt mir hier?

Als Abhilfe können, verwende ich diese:

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

Wenn Sie es doppelt mit '[*] zitieren, wird es zu einem einzigen Argument erweitert. 'printf"% s bloup \ n "" $ {_ array [*]} "' – eckes

Antwort

2

Gerade * anstelle von @ verwenden:

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

Der Zweck @ ist, um die Expansion als separate zitierten Worte zu machen zu behandeln für jedes Element, so dass die Erweiterung eines Arrays wie ("a b" c d) als 3 Argumente behandelt wird, nicht 4.

Verwandte Themen