@Drovosek01

Почему при переборе массива по элементам в цикле Bash строки-элементы разделяются по пробелам?

Есть скрипт. В нем есть массив с путями к файлам и в одном из путей есть пробелы.

Я перебираю все пути из массива и каждый путь передаю в функцию в качестве единственного аргумента и выполняю функцию:
for path in ${pathes[@]}; do
  myfunc "$path"
done

И в ходе выполнения скрипта появлялась ошибка
Can't open <часть пути к файлу>: No such file or directory.

Потом я выполнил перебор массива иначе, чтобы в цикле перебирались индексы массива, а потом я в функцию передаю элемент указывая массив с индексом:
for i in ${!pathes[@]}; do
  myfunc "${pathes[i]}"
done

Тогда код выполняется без проблем.

Вопросы:
Почему первый вариант выполняется с ошибкой?
При выполнении первого и второго вариантов в качестве аргумента к функции поступают разные значения?
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
IvanU7n
@IvanU7n
1. потому что массив после in должен быть в двойных кавычках, подробности в man bash
2. да, т.к. путь побился по пробелам в процессе работы for
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы