Mac OS:Bash GetOpts有时被忽略
我在我的bash_档案中写了一个小bash脚本。我想使用Mac OS:Bash GetOpts有时被忽略,bash,macos,getopts,Bash,Macos,Getopts,我在我的bash_档案中写了一个小bash脚本。我想使用getopts解析选项 deployMenu() { noInstallDependencies='false' build='true' echo "Args: $@" while getopts 'db' flag; do echo "flag ${flag}" case "${flag}" in d) noInstallDependencies='true' ;; b) bui
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
更改为--b
后,才能识别该标志。我最初认为第一个参数被忽略了,但是运行两次--b-b
也失败了。是否有缓存或任何需要先重置的内容?首先使用-b
然后切换到--b-b
使其工作是可复制的。由于在同一个shell实例中重复调用shell函数,因此在调用部署菜单
之间不会重置$OPTIND
的值。这会影响每次调用哪个选项时将其视为“下一个”。使用deployMenu…,尝试同样的实验。。。;echo$OPTIND
。如果您计划多次调用deployMenu
,那么解决方案可能只是显式设置OPTIND=1
deployMenu() {
noInstallDependencies='false'
build='true'
echo "Args: $@"
OPTIND=1
while getopts 'db' flag; do
...
}
getopts
不支持像--b
这样的长选项。Thx,我知道问题是它被忽略了-bI也只能使用-b,它仍然被忽略。这只是一个仅在更改args时才起作用的示例。