有两个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在“中间”创建所有缺少的目录。