【发布时间】:2018-08-08 15:56:35
【问题描述】:
我在我的 bash_profile 中编写了一个小的 bash 脚本。我想使用getopts 来解析选项。
deployMenu() {
noInstallDependencies='false'
build='true'
echo "Args: $@"
while getopts 'db' flag; do
echo "flag ${flag}"
case "${flag}" in
d) noInstallDependencies='true' ;;
b) build='false' ;;
#*) echo "Unexpected option ${flag}" ;;
#\?) echo "Unexpected option ${flag}" ;;
esac
done
echo "noInstallDependencies $noInstallDependencies"
echo "build $build"
如果我多次运行该命令,该参数将被忽略。我必须运行差异。标记以使其被识别。
User:project User$ deployMenu -b
Args: -b
noInstallDependencies false
build true
User:project User$ deployMenu -b
Args: -b
noInstallDependencies false
build true
User:project User$ deployMenu --b -b
Args: --b -b
flag b
noInstallDependencies false
build false
User:project User$ deployMenu --b -b
Args: --b -b
noInstallDependencies false
build true
如您所见,只有将参数从 -b 更改为 --<something> -b 后才能识别标志。我首先认为第一个参数被忽略但运行两次--b -b 也失败了。是否有任何缓存或任何要先重置的东西?首先使用-b 使其工作,然后切换到--b -b 是可重现的。
【问题讨论】:
-
getopts不支持像--b这样的长选项。 -
谢谢,我知道问题是它忽略了 -b
-
我也可以只使用 -b 并且它仍然被忽略。这只是一个示例,它仅在更改 args 时才有效。