这两个逻辑比较是否相同?

时间:2017-11-05 00:24:57

标签: bash case

鉴于变量:

path="a/b/c"

这两个逻辑比较是否相同?

[[ $path = */* ]] && echo 1

case $path in
   */*)
      echo 1
   ;;
esac

每个案例是否有效等同于括号测试结构? case[ vs [[

是否存在差异?

1 个答案:

答案 0 :(得分:2)

对于模式*/*case[[的行为相同。

但是,[[始终接受扩展的全局(因此它忽略了shell选项extglob的设置),而case仅在设置extglob时允许扩展的全局。因此,如果模式是扩展的glob并且未设置extglob,则这两个结构将采取不同的行为。 (最有可能的是,在case模式中使用扩展的glob会导致语法错误。)

[不进行模式匹配。在解释命令之前,命令[ $path = */* ]的参数将经历文件名扩展,这可能导致bash抱怨[有太多参数(除非你有一些有趣的命名文件或只有恰好一个匹配*/*的文件。