【问题标题】:How to find the options in if conditions of shell [duplicate]如何在shell的if条件中找到选项[重复]
【发布时间】:2012-06-13 04:08:57
【问题描述】:

在我的一个 shell 脚本中,我看到了

if [[ ! -d directory1 || ! -L directory ]] ; then

-d-L 选项在这里是什么意思?在哪里可以找到有关在 if 条件中使用的选项的信息?

【问题讨论】:

  • 那些不是if 语法;它们是[[ 语法。 [[ 是一个完全独立于 if 的命令。

标签: bash shell


【解决方案1】:

您可以执行help test,这将显示[[ 命令接受的大部分选项。

您也可以使用help [ 来显示更多信息。您可以通过help [[ 获取有关该类型条件的信息。

另请参阅“CONDITIONAL EXPRESSIONS”部分中的man bash

【讨论】:

  • 是否需要反斜杠?我希望help [ 完全等效。
  • @CharlesDuffy:我不知道我为什么在七年前逃脱了。我会删除它。
【解决方案2】:

-d 检查给定目录是否存在。 -L 测试符号链接。

Advanced Bash-Scripting Guide 中的File test operators 解释了各种选项。这里是man page for bash,也可以通过在终端中输入man bash 找到。

【讨论】:

    【解决方案3】:

    bash 有关于help 命令的内置帮助。您可以使用 help 轻松找到内置 bash 的选项:

    $ help [[
    ...
    Expressions are composed of the same primaries used by the `test' builtin
    ...
    $ help test
    test: test [expr]
        Evaluate conditional expression.
        ...
        [the answer you want]
    

    【讨论】:

      【解决方案4】:

      在 Bourne shell 中,[test 链接到同一个可执行文件。因此,您可以在test 联机帮助页中找到许多不同的测试

      这个:

      if [[ ! -d directory1 || ! -L directory ]] ; then
      

      表示directory1 是否不是目录如果directory 不是链接。

      我认为正确的语法应该是:

      if [[ ! -d $directory1 ] ||  [ ! -L $directory ]] ; then
      

      if [[ ! -d $directory1 -o ! -L $directory ]] ; then
      

      您的 OP 中的行是否正确?

      【讨论】:

      • OP中的行是正确的;您可能会将 bash 语法与 POSIX 语法混淆。 Bash 的[[ 支持|| 等等; POSIX [ 没有。要在 POSIX shell 中做同样的事情,你会做if [ -d "${directory1}" ] || ! [ -h directory ]; then-o 语法由 POSIX 指定,但已过时(它会导致解析歧义)。
      猜你喜欢
      • 2011-08-01
      • 2014-06-25
      • 2016-10-03
      • 1970-01-01
      • 2018-11-06
      • 2018-08-16
      • 2012-08-17
      • 1970-01-01
      • 2018-03-21
      相关资源
      最近更新 更多