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

在Bash中,如何将选项标志值存储在变量中?,bash,Bash,在编写Bash脚本时,如果在命令行中作为选项标志的一部分提供值,如何从命令行获取该值 例如: ./script --value=myText --otherValue=100 #!/bin/bash main() { [[ $1 =~ "--value=(.*)" ]] && echo "First arg: $1" value=${BASH_REMATCH[1]} [[ $2 =~ "--otherValue=(.*)" ]] &&

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

例如:

./script --value=myText --otherValue=100
#!/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 $*

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

如果您确实需要使用
--longoption
,如果您可以坚持使用单个字符选项
-a
,请坚持斯普拉夫所说的。 您可以执行以下操作:

./script --value=myText --otherValue=100
#!/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 $*
确保您正在运行Bash3.0

$ echo $BASH_VERSION
3.00.16(1)-release
如果您有bash4.x,不要在regex模式周围加双引号。

使用getopts

#!/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

您必须使用字符串操作,我不确定它在bash中是如何工作的。但似乎已经经历了这一过程。在选项顺序上最好灵活一些——不要假设“-value”必须是第一个选项。使用
while
循环和
shift
匹配选项。