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

7
当编写Bash脚本时,如果要从命令行选项标志的一部分中提供值,如何获取该值?
例如,在以下示例中:
./script --value=myText --otherValue=100

我该如何将myText100的值分别存储到变量$text$num中?


你需要使用字符串操作,我不确定在bash中如何操作。但是这个网站似乎有详细的介绍。 - Griffin
2个回答

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

0
如果你真的需要使用--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,请不要在正则表达式模式周围加上双引号。

1
最好对选项的顺序保持灵活性,不要假定“--value”必须是第一个选项。使用while循环和shift匹配的选项。 - glenn jackman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接