在 Bash 中,选项标志值如何存储在变量中? [复制]

Posted

技术标签:

【中文标题】在 Bash 中,选项标志值如何存储在变量中? [复制]【英文标题】:In Bash, how can option flag values be stored in variables? [duplicate] 【发布时间】:2011-12-12 16:30:00 【问题描述】:

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

例如:

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

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

【问题讨论】:

你必须使用字符串操作,我不确定它在 bash 中是如何工作的。 This site 似乎通过了它。 【参考方案1】:

使用 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

【讨论】:

【参考方案2】:

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

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

$ echo $BASH_VERSION
3.00.16(1)-release

如果您有 bash 4.x,请不要在正则表达式模式周围加上双引号。

【讨论】:

最好灵活选择选项的顺序——不要假设“--value”必须是第一个选项。使用while 循环和shift 匹配选项。

以上是关于在 Bash 中,选项标志值如何存储在变量中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Bash 中获取带有标志的参数

在 bash 中使用 getopts 的布尔 cli 标志?

Streamlit:如何将变量的值存储在缓存中

在 Bash 中使用 getopts 检索单个选项的多个参数

如何查看CMake使用哪些gcc选项?

Bash 脚本将命令输出存储到变量中