Это руководство Bash говорит:
Если номер индекса равен @ или *, на все элементы массива ссылаются.
Когда я делаю это:
LIST=(1 2 3)
for i in "${LIST[@]}"; do
echo "example.$i "
done
Дает: example.1 example.2 example.3
(желаемый результат).
Но когда я использую ${LIST[*]}
, я получаю example.1 2 3
вместо этого.
Почему?
Редактировать: при использовании printf @ и * фактически дают одинаковые результаты.
echo $SHELL
и вставьте вывод в ваш вопрос.echo
, а не сprintf
, я только что заметил.$*
и$@
. Хотя ответ будет аналогичным, и один вопрос можно считать подмножеством другого, это разные вопросы.Ответы:
Разница тонкая; «$ *» создает один аргумент, а «$ @» расширяется в отдельные аргументы, поэтому:
будет иметь дело со списком (распечатать его) как несколько переменных
но
будет иметь дело со списком как одна переменная.
источник
echo
иprintf
откуда? Посколькуprintf
в цикле for ссылка на список * обрабатывается как несколько переменных.