这两个shell命令有什么区别?

时间:2012-07-16 11:37:55

标签: shell unix scripting

有两个shell命令:

[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir $TRACEDIR/pattrace/rpt/.tracking  
[[ ! -d $TRACEDIR/pattrace/rpt/.tracking ]] && mkdir -p $TRACEDIR/pattrace/rpt/.tracking

显然,这些命令之间的唯一区别是-p标志。但是这个标志在这种情况下的作用是什么?

感谢。

2 个答案:

答案 0 :(得分:4)

来自mkdir man page

-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也会在“中间”创建所有缺失的目录。