4
#! bin/bash
# code for train.sh
   while getopts "f:" flag
    do
         case $flag in 
             f)
               echo "Hi" 
               STARTPOINT = $OPTARG
               ;;
         esac
    done

    echo Test range: $4
    echo Train range: $3

    #path of experiment folder and data folder:
    EXP_DIR="$1"
    DATA_DIR="$2"
    echo Experiment: $EXP_DIR
    echo DataSet: $DATA_DIR
    echo file: $STARTPOINT


I ran the command > ./train.sh test1  test2 test3 test4  -f testf  

そして出力を得ました

Test range: test4
Train range: test3
Experiment: test1
DataSet: test2
file:

そのため、ファイルの後に何も出力されず、case ステートメントで echo "Hi" コマンドが実行されないことがわかるため、何らかの理由で getopts オプションが機能していないようです。誰でもこれで私を助けてもらえますか?

4

2 に答える 2

9

ネイキッドパラメーターの前にオプションを配置する必要があります

./train.sh -f testf test1  test2 test3 test4

出力あり

Hi
Test range: test4
Train range: test3
Experiment: test1
DataSet: test2
file: testf

いくつかの変更も必要です

while getopts "f:" flag
do
     case $flag in
         f)
           echo "Hi" 
           STARTPOINT=$OPTARG
           shift
           ;;
     esac
     shift
done

環境変数を設定し、取得したオプションを邪魔にならないようにシフトするには

于 2013-08-08T00:26:16.860 に答える