使用带有 mkdir 和变量的 shell 脚本一次创建多个目录

使用带有 mkdir 和变量的 shell 脚本一次创建多个目录

我想要使​​用mkdirshell 脚本创建如下目录树。

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

当我在终端运行以下命令时,

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

那么它就可以工作了。

但是当我执行下面的 shell 脚本时它不能正确创建目录树

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

括号扩展发生在变量扩展之前,并且不会在变量赋值期间发生:

$ 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[@]}"

相关内容