鉴于变量:
path="a/b/c"
这两个逻辑比较是否相同?
[[ $path = */* ]] && echo 1
和
case $path in
*/*)
echo 1
;;
esac
每个案例是否有效等同于括号测试结构? case
对[
vs [[
答案 0 :(得分:2)
对于模式*/*
,case
和[[
的行为相同。
但是,[[
始终接受扩展的全局(因此它忽略了shell选项extglob
的设置),而case
仅在设置extglob
时允许扩展的全局。因此,如果模式是扩展的glob并且未设置extglob
,则这两个结构将采取不同的行为。 (最有可能的是,在case
模式中使用扩展的glob会导致语法错误。)
[
不进行模式匹配。在解释命令之前,命令[ $path = */* ]
的参数将经历文件名扩展,这可能导致bash抱怨[
有太多参数(除非你有一些有趣的命名文件或只有恰好一个匹配*/*
的文件。