bash中的[test]和[[test]]有什么区别?

bash中的[test]和[[test]]有什么区别?,bash,testing,conditional-statements,Bash,Testing,Conditional Statements,bash中的[test]和[[test]]有什么区别? 当一个比另一个更合适时,是什么最后怎么办 if [[ -z $DIRECTORY ]]; then DIRECTORY=html fi if [ ! -d "$DIRECTORY" ]; then echo installation directory "'${DIRECTORY}'" does not exist exit 1 fi [[是一个bash关键字,与[命令类似(但功能更强大)。请参阅,除非您是为

bash中的[test]和[[test]]有什么区别? 当一个比另一个更合适时,
是什么最后怎么办

if  [[ -z $DIRECTORY ]];
then
     DIRECTORY=html
fi

if [ ! -d "$DIRECTORY" ]; then
    echo installation directory "'${DIRECTORY}'" does not exist
    exit 1
fi

[[
是一个bash关键字,与
[
命令类似(但功能更强大)。请参阅,除非您是为POSIX sh编写的,否则我们建议在执行以下操作时使用单方括号:

  • 检查文件中的某些内容,并希望使用模式(例如星号):
    如果[-L$file];那么
  • 检查艺术表达式:
    如果[$a-lt$b];则
  • 检查带有字符串的内容,并希望使用
    ,并将特殊字符视为正常字符(例如星号):
    如果[-z“$string”];则
当我们:

  • 想要使用带字符串的模式(例如星号):
    如果[[“$string1”==*[sS]tring*];那么
  • 文件名中的块模式(例如星号)例如,我们搜索名为*.sh的文件:
    if[[-a*.sh]];然后
  • 要使用运算符&&和| |:
    如果[[$a==3 | | b==4];那么
  • 不想将字符串放入

    • [
      代表shell,
      [[
      代表bash

      例如:
      尝试
      [$A-等式1]
      :如果未设置
      $A
      ,则会引发错误。

      [$A-eq 1]]
      将起作用。

      和的可能重复。你做了一个相当人为的区分,因为你在单括号下列出的所有内容都可以用双括号完成。当然你是对的。这只是写下了我记得何时使用哪个括号的方式:)我的观点是,你不需要对其中任何一个使用单括号。使用单括号如果您编写的代码需要与POSIX兼容,请使用双括号;如果您的代码只需要在
      bash
      下运行
      /bin/[/code>在功能上也等同于
      /usr/bin/test