Я хочу создать дерево каталогов следующим образом, используя 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
Не могли бы вы помочь мне разобраться в этой проблеме?
Расширение фигурной скобки происходит задолго до переменного расширения и не происходит во время переменного присвоения:
$ 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[@]}"