Bash:getopts将标志作为错误参数传递
我正在尝试运行一个具有多个参数的命令。命令语法如下所示:Bash:getopts将标志作为错误参数传递,bash,getopts,Bash,Getopts,我正在尝试运行一个具有多个参数的命令。命令语法如下所示: ./foo -d directory -f file -v version app1 app2 app3 (this situation works) 但是,如果我将-v version放在app1,2,3之后,它将作为参数传递,而不是-v标志。如何使-v标志在具有多个参数的任一位置工作 while getopts ":d:f:v:" OPTION do case $OPTION in d ) IF
./foo -d directory -f file -v version app1 app2 app3 (this situation works)
但是,如果我将-v version
放在app1,2,3
之后,它将作为参数传递,而不是-v
标志。如何使-v
标志在具有多个参数的任一位置工作
while getopts ":d:f:v:" OPTION
do
case $OPTION in
d ) IFS=","; directory=$OPTARG;;
f ) file=$OPTARG;;
v ) version=$OPTARG;;
* ) echo && usage;;
/? ) echo && usage;;
esac
done
shift $(( OPTIND - 1 ))
for dir in ${dirList} do
for f in ${file} ; do
echo $dir/$file
done
done
applications=$@
Unix中的标准选项处理在第一个非选项处停止(不包括标有
:
的选项的参数)。这有点重要,因为否则您无法处理任何以-
开头的文件或目录
如果您确实必须违反这些规则,可以尝试使用外部程序
getopt(1)
,该程序使用库函数getopt(3)
。在阅读该函数的手册页面时,有一些关于参数洗牌的备注。这些可能会对您有所帮助。您可以使用getopt定义它,以便执行以下操作:
./foo -d directory -f file -v version -v app1 -v app2 -v app3
getopts
停止对第一个非选项参数的解析(跳过选项参数)。感谢将给另一个getopt(1,3)一个尝试。很遗憾,这对我的应用程序不起作用。脚本必须传递不带标志的参数。