2015-08-20 48 views
0

我对Bash与其他语言中的case语句有点混淆。也许这是最好的直接问题。什么是if语句等价的:bash:如果相当于case语句

case $filename in 
     *_[0-9][0-9]) 
      echo "fine";; 
     *) 
      echo "fail";; 
    esac 

感谢

回答

2

注意,而case版本是POSIX兼容的,下面是具体到炮弹,如bash,它采用KSH扩展。 (POSIX sh不提供除case之外的任何本机机制,以针对变量内容而不是文件系统执行fnmatch样式模式匹配)。

if [[ $filename = *_[0-9][0-9] ]]; then 
     echo "fine" 
else 
     echo "fail" 
fi 

更多关于[[BashFAQ #31,并从如何不同,内置[test命令。

另请参阅the POSIX sh specification for case

+0

谢谢。我是否曾经想用[[]]使用双引号? – Ray

+0

'[[$ foo = $ bar]]'左边的双引号是严格可选的。在右侧,他们使内容文字 - 一个确切的子字符串匹配而不是一个全局样式匹配。 –

+0

我明白了,谢谢。 – Ray