Страницы

Поиск по вопросам

пятница, 14 июня 2019 г.

Bash: путь с пробелами в массиве

Есть массив с путями и цикл его переберающий (песочница):
paths=( "~/.config/sublime-text-3/Installed Packages" ~/.config/sublime-text-3/Local ~/.config/sublime-text-3/Packages )
for path in ${paths[@]} do echo ${path} done
Результат:
~/.config/sublime-text-3/Installed Packages /home/cg/root/.config/sublime-text-3/Local /home/cg/root/.config/sublime-text-3/Packages
В результате видно, что возникает проблема с пробелом в пути ~/.config/sublime-text-3/Installed Packages и Packages воспринимается как элемент массива.
Как её можно исправить?
Единственное, что пришло в голову, это экранировать пробел:
paths=( ~/.config/sublime-text-3/Installed\ Packages ~/.config/sublime-text-3/Local ~/.config/sublime-text-3/Packages )
Но результат тот же.

P. S. Если код в песочнице не работает, то нужно очистить куки; по крайней мере у меня возникали какие-то проблемы в Chrome с этим.


Ответ

можно поместить в двойные кавычки подстановку массива:
for path in "${paths[@]}"

да и при обращении к отдельным строкам двойные кавычки не помешают (чтобы опять-таки не столкнуться с разделением на подстроки по пробелам):
"${path}"

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

Отправить комментарий