2016-09-24 4 views
2
рабочих

Справочника содержит как 5 проектов:Matching каталогов в каталоге

project-1 
project-2 
project-3 
project-4 
project-5 

Я хочу, чтобы соответствовать всем папкам в этой директории, но массив не заполнит список, когда я использую переменный:

workspace="~/workspace"; 

myDirectories=(${workspace}/project-*/); 

Если я передаю его вручную, он автоматически загрузит каталоги без проблем.

myDirectories=(~/workspace/project-*/); 

Я знаю, что это что-то простое, но я пропустил, но это прослушивает меня!

+0

Вы уверены, что не использовали кавычки в декларации 'workspace'? В противном случае невозможно воспроизвести. – heemayl

+0

Переменные хранятся в файле .cfg - и они являются ключевым значением - и да, они находятся в кавычках. Виноват. – SMKS

+0

Вы хотите, чтобы я ответил? Если это так, используйте кавычки в примере, который вы предоставили. – heemayl

ответ

3

Вы использовали кавычки в workspace объявлении переменной как:

workspace="~/workspace" 

Так ~ не будет расширен в качестве домашнего каталога, но будет рассматриваться в буквальном смысле.

Вы можете:

  • Оставить ~ вне кавычки (обратите внимание, что кавычки не являются необходимыми в данном случае):

    workspace=~/"workspace" 
    
  • Или использовать $HOME вместо ~:

    workspace="$HOME"/workspace 
    
  • Или используйте абсолютные пути, начинающиеся с /, например. /home/username/workspace

+0

'~/workspace' * - это абсолютный путь; адрес, который он ссылается, не зависит от текущего рабочего каталога. – chepner

+0

@chepner Отредактировано для уточнения. – heemayl

+0

Третий вариант сильно отличается от первых двух. Вы жестко кодируете домашний каталог одного пользователя, а не используете домашний каталог пользователя, фактически запускающего скрипт. – chepner

1

~ не будет работать правильно (развернуть в домашнем каталоге пользователя), если это не без кавычек.
В качестве * также необходимо исключить раскрутку.

Вы можете определить каталог в виде фиксированной строки (убрать ведущий ~):

workspace="workingdirectory"  # or just workspace=workingdirectory 

И оставить все расширения для определения массива (оба работают):

myDirectories=(  ~/"${workspace}/"project-*/); 
myDirectories=("${HOME}/${workspace}/"project-*/); 

Вы можете используйте фиксированные каталоги, такие как: "/home/user/$workspace/"project-*/, но в этом случае вы теряете способность адаптироваться к любому текущему пользователю, запускающему скрипт без какого-либо реального выигрыша.
Также можно использовать ~/ во время определения переменной workspace, но это также исправит пользователя для пользователя, выполняющего ту часть скрипта, которая может быть не такой, как та, которая делает расширения каталога.
Все рассмотренное, расширяющееся во время создания массива, кажется лучшим решением, и оба решения выше работают хорошо.

Смежные вопросы