Shell:带有元组参数的case开关

时间:2016-09-28 06:29:00

标签: bash shell switch-statement

对于元组case switch,你能否为元组中的任何变量指定glob?

我很好奇,当参数是一个元组时,case switch如何在bash shell中工作。我将使用的示例是prepare-commit-msg的git-hook;但是,我会解释所以不需要知识。

脚本的参数是:$1=commit message$2=commit type$3=SHA-1。提交消息$1与我们的目的无关。提交类型$2可以是以下任何字符串:消息,模板,合并,压缩或提交。 SHA-1 $3是40个字符串或null。

使用git分发的代码是

#!/bin/bash    

case "$2,$3" in 
  merge,)
    # do something for merge with no SHA-1
  ;;

  *)
   # do something for everything else
  ;;

如果我的问题的答案是肯定的,那么这是正确的实施方式吗?

#!/bin/bash    

case "$2,$3" in 
  merge,)
    # do something for merge with no SHA-1
  ;;

  commit,*)
   # do something for commits with SHA-1
  ;;

  *,)
    # do something for non merge with no SHA-1
  ;;

  *,*)
    # do something for non commit with SHA-1
  ;;

1 个答案:

答案 0 :(得分:1)

引用bash手册页。

  

case命令首先扩展word,并尝试依次使用与路径名扩展相同的匹配规则将其与每个模式匹配(请参阅下面的Pathname Expansion)。 使用代字号扩展,参数和变量扩展,算术替换,命令替换,进程替换和引用删除来扩展单词。检查的每个模式都使用波形扩展,参数和变量扩展,算术替换,命令替换和流程替换进行扩展。

我认为您的实施是正确的。