在bash中使用case语句中的通配符

在bash中使用case语句中的通配符,bash,wildcard,Bash,Wildcard,我正在制作一个简单的bash脚本。它接受两个选项(-d和-f)。我还想允许这个选项的长版本(-directory和-file)。我试着使用花括号通配符,但不起作用。有什么建议吗 谢谢 #!/bin/bash while test $# != 0 do case $1 in -f) # do something ;; {-d,-directory}) # do something ;; *) echo "error" ;; es

我正在制作一个简单的bash脚本。它接受两个选项(-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
使用管道符号:

case $1 in
    -f)
        # do something
        ;;
    -d|-directory)
        # do something
        ;;
    *)
        echo "error"
        ;;
 esac
case语句中的各种选项都是shell脚本模式,其中一个模式实际上可以是由该管道符号分隔的多个模式。例如,您也可以在此模式中使用正则表达式

-[dD]|-directory)
将同时匹配
-d
-d
-directory

使用管道符号:

case $1 in
    -f)
        # do something
        ;;
    -d|-directory)
        # do something
        ;;
    *)
        echo "error"
        ;;
 esac
case语句中的各种选项都是shell脚本模式,其中一个模式实际上可以是由该管道符号分隔的多个模式。例如,您也可以在此模式中使用正则表达式

-[dD]|-directory)
将与您可以使用的
-d
-d
-directory
匹配

-d|-directory)
    # do something
    ;;
但您应该考虑使用双破折号来匹配“长选项”,如您可以使用的
--directory

中的选项

-d|-directory)
    # do something
    ;;

但是您应该考虑使用双破折号来匹配“长选项”,如在
--directory

中,也许您会对解析命令行参数的
getopt
感兴趣。也许您会对解析命令行参数的
getopt
感兴趣。是的,双破折号更好!谢谢,双短跑更好!谢谢