заставить bash printf рассматривать массив как один аргумент

#linux #bash

#linux #bash

Вопрос:

В 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
  

Комментарии:

1. Если вы используете его в двойных кавычках, [*] он расширится до одного аргумента. printf "%s bloupn" "${_array[*]}"

Ответ №1:

Просто используйте * вместо @ :

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

Цель @ состоит в том, чтобы заставить обрабатывать расширение как отдельные слова в кавычках для каждого элемента, чтобы расширение подобного массива ("a b" c d) обрабатывалось как 3 аргумента, а не 4.