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 に答える