Bash [-d:未找到命令

Bash [-d:未找到命令,bash,shell,Bash,Shell,根据这个答案:,我试图检查目录是否存在。但是,当我运行这个时,我得到第1行:[-d:command not found。我在这里做错了什么 if [-d "~/.ssl"]; then echo '~/.ssl directory already exists' else sudo mkdir ~/.ssl/ fi 这不是命令 [ -d 是带有-d选项的命令 空间问题 (另外,[命令需要以]参数结尾,该参数同样必须用空格与其他参数分隔。) 这是问题的症结所在。不过,还有几个其他问题:

根据这个答案:,我试图检查目录是否存在。但是,当我运行这个时,我得到
第1行:[-d:command not found
。我在这里做错了什么

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

[ -d
是带有-d选项的命令

空间问题

(另外,
[
命令需要以
]
参数结尾,该参数同样必须用空格与其他参数分隔。)

这是问题的症结所在。不过,还有几个其他问题:

  • 如果您引用波浪形符号,它不会扩展。(这是一个罕见的避免使用引号的地方。)但是,引号很好,所以为什么不编写
    “$HOME/.ssl”
    ?(在~和“$HOME”之间有细微的区别,但对于大多数用途来说并不重要。)
  • 您的检查可能被撤销了–现在您正在尝试创建目录,前提是它已经存在
  • 老实说,你真正需要的可能是:

    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
    

    谁否决了这个?这是完全正确的。顺便说一下,
    [-d”~/.ssl]
    正在寻找一个包含文本
    ~
    字符的目录名。您想要
    “$HOME/.ssl”
    [-d~/.ssl]
    没有引号。顺便说一句,你不需要检查。只需使用
    mkdir-p
    …呃,等等,为什么你只想创建一个已经存在的目录?这里有些可疑…@kojiro-Oops,是的,我刚刚意识到我搞错了。另外,你不应该使用sudo来处理mkdir。有
    ~/.ssh
    与您的
    $HOME
    (这正是您在执行
    sudo
    操作时得到的结果--
    ~/.ssh
    root
    拥有)不同的用户拥有,这是自找麻烦。
    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