有两个shell命令:
[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir $TRACEDIR/pattrace/rpt/.tracking
[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir -p $TRACEDIR/pattrace/rpt/.tracking
显然,这些命令之间的唯一区别是-p
标志。但是这个标志在这种情况下的作用是什么?
感谢。
答案 0 :(得分:4)
-p, --parents
no error if existing, make parent directories as needed
换句话说,如果所需的目录不存在,则将根据需要创建它们。如果目录已存在,则不会导致错误。
这是寻找man pages的好地方(除了当然使用谷歌)
答案 1 :(得分:2)
mkdir
选项的 -p
将创建指定路径的所有必需父目录(如果它们不存在)(请参阅man pages)。此外,对于-p
,如果目录本身已存在,则不会出现错误。
在您的特定情况下,第一个命令可能会失败,因为完整路径的测试不充分。如果只有$TRACEDIR/
存在,但测试也将失败,但随后的mkdir
将失败,因为它需要$TRACEDIR/pattrace/rpt/
存在。
第二个命令将起作用,因为mkdir -p
也会在“中间”创建所有缺失的目录。