为什么这个bash脚本创建一个新目录?

问题描述 投票:-1回答:1

我不熟悉bash脚本的使用(在过去的几个小时中,我只是作为一个较大项目的一部分来学习它的,我正在尝试理解bash脚本中的这段代码:

for newDir in `cat tempfile.list` ; do
        dir=/Tree/Apples/$newDir
        [ -d $dir ] || mkdir -p $dir/{log,err}
done

[-d $ dir]做什么?这段代码是否在dirName目录中创建了一个名为Apples的新目录?如果是这样,为什么要这样做呢?我没有看到说mkdir dirName的声明。有人可以大致解释一下[ -d $dir ] || mkdir -p $dir/{log,err}语句的含义吗?非常感谢您的帮助!

bash boolean-logic mkdir
1个回答
0
投票
command1 || command2

是一种简短的书写方式

if ! command1
then
    command2
fi

||是具有短路的逻辑测试,类似于大多数编程语言;如果左侧操作数成功,则不会执行右侧操作数。

[ -d $dir ]测试名为$dir的目录是否已经存在。因此,如果该测试失败,它将执行mkdir -p $dir/{log,err}

mkdir创建目录,并且在给定-p选项后,它将创建创建目标目录所需的所有中间目录。

用逗号分隔的列表中的括号用于自动重复命令的一部分,因此$dir/{log,err}$dir/log $dir/err的快捷方式。因此,完整的mkdir命令扩展为

mkdir -p $dir/log $dir/err

因此,此脚本要做的是创建tempfile.list中列出的所有尚不存在的目录,并在其创建的目录中创建logerr子目录。

© www.soinside.com 2019 - 2024. All rights reserved.