[-d:找不到命令

时间:2014-03-31 17:44:49

标签: bash shell

根据这个答案:Unix Bash Shell Programming if directory exists,我试图检查目录是否存在。但是,当我运行它时,我得到line 1: [-d: command not found。我在这里做错了什么?

if [-d "~/.ssl"]; then
  echo '~/.ssl directory already exists'
else
  sudo mkdir ~/.ssl/
fi

1 个答案:

答案 0 :(得分:18)

[-d

不是命令。

[ -d

是带有-d选项的test命令。

空间很重要。

(另外,[命令需要以]参数结束,该参数同样必须通过空格与其他参数分开。)

这就是问题的症结所在。但是还有其他一些问题:

  1. 如果您引用波浪号,则不会展开。 (这是你可能想要避免引用的罕见地方之一。)虽然报价很好,但为什么不写"$HOME/.ssl"? (〜和“$ HOME”之间存在细微差别,但对大多数用途来说无关紧要。)
  2. 您的支票可能已被撤消 - 现在您只是在目录存在的情况下尝试创建目录。
  3. 老实说,你真正需要的只是:

    if mkdir -p ~/.ssl; then
      # Do stuff with new directory
    else
      # Handle failure (but keep in mind `mkdir` will have its own error output)
    fi