#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.