Включение индекса @
в длинную строку может привести к странным результатам:
$ arr=(a b c)
$ printf '%s\n' "Hi there ${arr[@]}"
Hi there a
b
c
Это происходит потому, что цитируемое расширение ${arr[@]}
представляет собой серию отдельных слов, которые printf
будут использовать по одному за раз. Первое слово a
оканчивается на Hi there
с добавленным к нему (так же, как все, что следует за массивом, будет добавлено к c
).
Когда расширение массива является частью более крупной строки, вы почти наверняка захотите, чтобы расширение было одним словом.
$ printf '%s\n' "Hi there ${arr[*]}"
Hi there a b c
С echo
это едва ли имеет значение, поскольку вам, вероятно, все равно, получает ли echo
один или несколько аргументов.