2017-12-06 6 views
1

私は引数を解析する関数を書こうとしています。関数内のオプションを読んで値として返します

opts_get(){ 
    CONFIG=() 
    while getopts "f:" opt; do 
     case $opt in 
      f) 
       CONFIG=$OPTARG 
       ;; 
      :) 
       echo "Option -$OPTARG requires argument" 1>&2 
       exit 1 
       ;; 
      \?) 
       echo "Invalid option -$OPTARG" 1>&2 
       exit 1 
       ;; 
     esac 
    done 
    echo $CONFIG 
} 

echo $(opts_get) 

しかし残念ながら、それは私が-f sdfオプションを渡しても、空行を出力します。ここではそれがどのように見えるかです。

私は任意の関数

CONFIG=() 
while getopts "f:" opt; do 
    case $opt in 
     f) 
      CONFIG=$OPTARG 
      ;; 
     :) 
      echo "Option -$OPTARG requires argument" 1>&2 
      exit 1 
      ;; 
     \?) 
      echo "Invalid option -$OPTARG" 1>&2 
      exit 1 
      ;; 
    esac 
done 
echo $CONFIG #prints what I want 

答えて

2

の外に読んオプションコードを置く場合は、引数に関数を渡していません。スクリプトから関数に渡す必要があります。

echo $(opts_get "[email protected]") 

位置引数は、コマンドラインを形成するために2番目場合が働い直接getoptsによって読み取られます。また、変数の初期化を配列宣言ではなくCONFIG=""に修正してください。

また、${OPTIND}が関数のローカルであることを確認する必要があります。そうしないと、関数を複数回呼び出すと予期しない動作が発生します。

+0

したがって、関数が別の関数から呼び出された場合。最初に呼び出し元関数にパラメータを渡す必要があります。 –

+0

$ '{OPTIND}'はどういう意味ですか? –

+0

@ St.Antario:Yes absolutely – Inian

関連する問題