有两个shell命令:
[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir $TRACEDIR/pattrace/rpt/.tracking
[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir -p $TRACEDIR/pattrace/rpt/.tracking
显然,这些命令之间的唯一区别是-p
标志。但是这个标志在这种情况下做了什么?
谢谢。
mkdir
使用该-p
选项将创建指定路径的所有必要父目录,如果它们不存在(参见手册页)。此外,-p
如果目录本身已经存在,您将不会收到错误消息。
在您的特定情况下,第一个命令可能会失败,因为对完整路径的测试不够。如果仅存在,测试也将失败,$TRACEDIR/
但随后mkdir
将失败,因为它需要$TRACEDIR/pattrace/rpt/
存在。
第二个命令将起作用,因为也会mkdir -p
在“中间”创建所有缺少的目录。