Bha*_*wal -1 command-line bash scripts
我想mkdir在 shell 脚本中使用如下创建目录树。
Tutorial
?
??? abc
? |
? ??? def
?
??? pqr
??? stu
?
??? vwx
Run Code Online (Sandbox Code Playgroud)
当我在终端中运行以下命令时,
mkdir -p /home/LinuxServer/GIT/bbb/Tutorial/{abc/def,pqr/{stu,vwx}}
Run Code Online (Sandbox Code Playgroud)
然后它正在工作。
但是当我执行以下 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
Run Code Online (Sandbox Code Playgroud)
你能帮我理解这个问题吗?
大括号扩展发生在变量扩展之前,并且不会在变量赋值期间发生:
$ foo={a,b,c}
$ echo $foo
{a,b,c}
Run Code Online (Sandbox Code Playgroud)
将公共部分保留在变量中,其余部分保留在命令本身中:
DIRECTORY_PATH="/home/LinuxServer/GIT/bbb/"
TUTORIAL_PATH="${DIRECTORY_PATH}Tutorial"
mkdir -p "$TUTORIAL_PATH"/{abc/def,pqr/{stu,vwx}}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用数组,其中在赋值期间会发生大括号扩展:
TUTORIAL_PATHS=( "${DIRECTORY_PATH}Tutorial"/{abc/def,pqr/{stu,vwx}} )
mkdir -p "${TUTORIAL_PATH[@]}"
Run Code Online (Sandbox Code Playgroud)