関数にブールフラグを渡しますか?

関数にブールフラグを渡しますか?

関数が変更するパラメータによって異なります。
私は私ができることを知っています:

function foo {  
  PARAM1=$1  
  PARAM2="$2"  
  VAR=$3  
  if[[ -z "$VAR" ]]; then  
   # code here  
  else  
   # other code here  
  fi  
}  

Bashにもっと適切な方法があるかどうか疑問に思います。これはうまくいきますが、私は次のようなものを望んでいません

foo "x" "y" "blah"  
foo "x" "y" "true"  
foo "y" "y" "1"

すべてが同じです。

Bashを使用するより良い方法はありますか?

ベストアンサー1

関数にコマンドラインオプションを提供できます。引数なしでコマンドラインオプションを使用することは、シェルスクリプト、シェル関数、およびユーティリティにバイナリ/ブール値(「on / off」、「true / false」、「enable / disable」)を提供する一般的な方法です。

foo () {
    local flag=false
    OPTIND=1

    while getopts 't' opt; do
        case $opt in
            t) flag=true ;;
            *) echo 'Error in command line parsing' >&2
               exit 1
        esac
    done
    shift "$(( OPTIND - 1 ))"

    local param1="$1"
    local param2="$2"

    if "$flag"; then
        # do things for "foo -t blah blah"
    else
        # do things for "foo blah blah"
    fi
}

このオプションは-tユーザーにブールフラグとして表示されます。これを使用すると、flag関数は内部的にtrue(デフォルトをに変更false)に設定されます。この-tオプションは関数の最初のパラメータとして使用されます。

この関数を呼び出すには、次を使用できます。

foo "some value" "some other value"

または

foo -t "some value" "some other value"

後者の呼び出しはflag関数の変数をに設定しますtrue

おすすめ記事