在 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
如何将myText
和100
值存储在变量$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 中使用 getopts 的布尔 cli 标志?