関数が変更するパラメータによって異なります。
私は私ができることを知っています:
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
。