Создание нескольких каталогов одновременно с использованием сценария оболочки с mkdir и переменными

Я хочу создать дерево каталогов следующим образом, используя mkdir в сценарии оболочки.

Tutorial
│
├── abc
│   |
│   └── def
│       
└── pqr
    ├── stu
    │   
    └── vwx

Когда я запускаю следующую команду в терминале,

mkdir -p /home/LinuxServer/GIT/bbb/Tutorial/{abc/def,pqr/{stu,vwx}}

, тогда она работает.

Но когда я выполняю следующий сценарий оболочки, он не создает дерево каталогов должным образом

DIRECTORY_PATH="/home/LinuxServer/GIT/bbb/"
CREATE_DIRECTORY_STRUCTURE="Tutorial/{abc/def,pqr/{stu,vwx}}"
TUTORIAL_PATH="$DIRECTORY_PATH$CREATE_DIRECTORY_STRUCTURE"

mkdir -p  $TUTORIAL_PATH

Не могли бы вы помочь мне разобраться в этой проблеме?

-1
задан 19 September 2017 в 16:05

1 ответ

Расширение фигурной скобки происходит задолго до переменного расширения и не происходит во время переменного присвоения:

$ foo={a,b,c}
$ echo $foo
{a,b,c}

Сохраняют общие части в переменной и остальных в самой команде:

DIRECTORY_PATH="/home/LinuxServer/GIT/bbb/"
TUTORIAL_PATH="${DIRECTORY_PATH}Tutorial"

mkdir -p  "$TUTORIAL_PATH"/{abc/def,pqr/{stu,vwx}}

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

TUTORIAL_PATHS=( "${DIRECTORY_PATH}Tutorial"/{abc/def,pqr/{stu,vwx}} )
mkdir -p "${TUTORIAL_PATH[@]}"
0
ответ дан 20 September 2017 в 02:05

Другие вопросы по тегам:

Похожие вопросы: