1

我正在制作一个简单的 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
4

2 回答 2

4

使用管道符号:

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

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

-[dD]|-directory)

将匹配-d,-D-directory.

于 2013-03-26T20:13:41.540 回答
2

您可以使用

-d|-directory)
    # do something
    ;;

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

于 2013-03-26T20:15:50.023 回答