我正在尝试运行具有多个参数的命令。命令语法如下:
./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=$@
答案 0 :(得分:2)
Unix中的标准选项处理在第一个非选项处停止(不包括标有:
的选项的参数)。这有点重要,因为否则您无法处理以-
开头的任何文件或目录。
如果您真的必须违反这些规则,可以尝试使用库函数getopt(1)
的外部程序getopt(3)
。阅读该函数的手册页有一些关于参数shuffling的评论。这些可能对你有帮助。
答案 1 :(得分:0)
您可以使用getopt定义它,以便您执行以下操作:
./foo -d directory -f file -v version -v app1 -v app2 -v app3