Bash:getopts将标志作为错误参数传递

时间:2011-10-31 21:11:30

标签: 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 ) 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=$@

2 个答案:

答案 0 :(得分:2)

Unix中的标准选项处理在第一个非选项处停止(不包括标有:的选项的参数)。这有点重要,因为否则您无法处理以-开头的任何文件或目录。

如果您真的必须违反这些规则,可以尝试使用库函数getopt(1)的外部程序getopt(3)。阅读该函数的手册页有一些关于参数shuffling的评论。这些可能对你有帮助。

答案 1 :(得分:0)

您可以使用getopt定义它,以便您执行以下操作:

./foo -d directory -f file -v version -v app1 -v app2 -v app3