0

我正在尝试运行具有多个参数的命令。命令语法如下:

./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=$@
4

2 回答 2

2

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

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

于 2011-10-31T21:29:15.623 回答
0

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

./foo -d directory -f file -v version -v app1 -v app2 -v app3
于 2011-10-31T22:40:43.183 回答