![使用带有 mkdir 和变量的 shell 脚本一次创建多个目录](https://linux22.com/image/1002966/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20mkdir%20%E5%92%8C%E5%8F%98%E9%87%8F%E7%9A%84%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%80%E6%AC%A1%E5%88%9B%E5%BB%BA%E5%A4%9A%E4%B8%AA%E7%9B%AE%E5%BD%95.png)
我想要使用mkdir
shell 脚本创建如下目录树。
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[@]}"