Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:getopts将标志作为错误参数传递_Bash_Getopts - Fatal编程技术网

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)一个尝试。很遗憾,这对我的应用程序不起作用。脚本必须传递不带标志的参数。