【问题标题】:what does exclamation mark mean in linux?感叹号在linux中是什么意思?
【发布时间】:2021-09-18 14:40:48
【问题描述】:

我一直在学习一些在线课程,他们要求我从 GitHub 克隆一个存储库,如下所示...

克隆包含本实验室所需工件的 git 存储库(如果尚不存在)。

[ ! -d 'cc201' ] && git clone https://gitlab.com/ibm/skills-network/courses/cc201.git

但是,我不明白下面的命令

[ ! -d 'cc201' ]

这个有什么用??谁能知道它到底是干什么用的!?

【问题讨论】:

标签: bash terminal git-bash


【解决方案1】:

感叹号表示“Not”(如布尔值),-d 标志表示 bash 中存在的文件夹。

所以它本质上是一个条件,即:“如果名为 'cc201' 的文件夹不存在,则执行某些操作

【讨论】:

  • 这不是问题,对于其他阅读本文的人来说,&& 进行短路评估可能值得一提,所以左边的条件必须为真,右边的条件进行评估。
【解决方案2】:

请注意,!Linux(操作系统)中没有特殊含义,但在 Linux 的几个标准程序中。在您的情况下,它不是 bash 的一个功能(正如 Mark Bramnik 在他的其他正确答案中声称的那样),而是称为 test[ 的标准程序的一个功能。由于 bash 在内部模拟此命令,当然它也必须解释 !,但可以通过 man test 找到定义,其中描述为:

   ! EXPRESSION
         EXPRESSION is false

实际上,bash 确实也有一个!,具有相关但不完全相同的含义。如果您通过在程序前面加上! 来调用程序,即

! prog
如果 prog 以非零退出代码终止,

bash 将退出代码设置为 0,如果 prog 以退出代码 0 终止,则将其设置为 1。因此,你可以写

[ ! -d cc201 ]

同样好

! [ -d cc201 ]

整体效果是一样的,不过前者是test中的!,反过来被bash模拟,而后者是bash内置的ststus-code negator。

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多