在bash中使用wildcard inside case语句

时间:2013-03-26 20:06:49

标签: bash wildcard

我正在制作一个简单的bash脚本。它接受2个选项(-d和-f)。我还想允许这个选项的长版本(-directory和-file)。我尝试使用大括号通配符,但它不起作用。有什么建议吗?

谢谢!

#!/bin/bash

while test $# != 0
do
  case $1 in
  -f)
    # do something
    ;;
  {-d,-directory})
    # do something
    ;;
  *)
    echo "error"
    ;;
  esac
  shift
done

2 个答案:

答案 0 :(得分:4)

使用竖线符号:

case $1 in
    -f)
        # do something
        ;;
    -d|-directory)
        # do something
        ;;
    *)
        echo "error"
        ;;
 esac

case语句中的各种选项都是shell脚本 patterns ,其中 pattern 实际上可以是由此管道符号|分隔的多个模式。您还可以在此模式中使用正则表达式,例如

-[dD]|-directory)

会同时匹配-d-D-directory

答案 1 :(得分:2)

您可以使用

-d|-directory)
    # do something
    ;;

但你应该考虑使用双短划线来匹配--directory中的“长选项”。