我想要使用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[@]}"