在bash中,如何将选项标志值存储在变量中?

In Bash, how can option flag values be stored in variables?

本问题已经有最佳答案,请猛点这里访问。

在编写bash脚本时,如果在命令行中作为选项标志的一部分提供,如何从命令行获取值?

例如,在以下内容中:

1
./script --value=myText --otherValue=100

如何将myText100值存储在变量$text$num中?


使用Goopts。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

while getopts":a:" opt; do
  case $opt in
    a)
      echo"-a was triggered, Parameter: $OPTARG">&2
      ;;
    \?)
      echo"Invalid option: -$OPTARG">&2
      exit 1
      ;;
    :)
      echo"Option -$OPTARG requires an argument.">&2
      exit 1
      ;;
  esac
done

如果你真的需要使用--longoption,如果你能坚持使用单字符选项-a,那么就坚持spraff所说的。您可以执行以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
main()
{
    [[ $1 =~"--value=(.*)" ]] && echo"First arg: $1"
    value=${BASH_REMATCH[1]}

    [[ $2 =~"--otherValue=(.*)" ]] && echo"Second arg: $2"
    other=${BASH_REMATCH[1]}

    echo $value
    echo $other

    #doYourThing

    return 0

}

main $*

确保运行的是bash 3.0。

1
2
$ echo $BASH_VERSION
3.00.16(1)-release

如果您有bash 4.x,不要在regex模式周围加双引号。