Страницы

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

суббота, 7 марта 2020 г.

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

#linux #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 с этим.
    


Ответы

Ответ 1



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

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

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