関数に渡されたパラメータの処理方法は、シェルスクリプト実行時に渡されたコマンドラインパラメータの処理方法と同じです。 以下のコマンドラインパラメータの処理方法に関する記事も参考にしてください。
関数へ渡されたパラメータの数を調べる ($#)
関数内で $#
を参照すると、渡されたパラメータの数を調べることができます。
function foo {
echo $#
}
$ foo 100 200
2
$ foo aaa bbb ccc
3
$ foo "This is a pen"
1
☝️ ワンポイント
関数の外で
$#
を参照すると、シェルスクリプト実行時に渡されたコマンドラインパラメータの数を取得できます。function foo {
if [ $# -lt 1 ]; then
echo 'Function "foo" needs at least one parameter' >&2
exit -1
fi
echo 'OK'
}
関数へ渡されたパラメータを順番に処理する
function enum_params {
while [ -n "$1" ]; do
echo $1
shift
done
}
[ -n "$1" ]
の部分では、パラメーターが空文字ではないかどうかを調べています。
shift
コマンドは、パラメータを左にシフトします。
つまり、$2
の値が $1
に、$3
の値が $2
に、というようにシフトされます。
これにより、すべてのパラメーターを $1
で順番に参照することができます。
$ enum_params 1 2 3
1
2
3
パラメータをシングルクォーテーション、あるいはダブルクォーテーションで囲むと、1 つのパラメータとして処理されます。
$ enum_params "1 2 3"
1 2 3
関数のデフォルトパラメータを定義する
パラメータを参照するときに、${1:-デフォルト値}
という形で参照すると、1 つ目のパラメータが指定されなかった場合に デフォルト値
を使用することができます(これも、シェルスクリプト自体のコマンドラインパラメータの扱い方と同様です)。
function greet {
name=${1:-everyone}
echo "Hello $name"
}
$ greet
Hello everyone
$ greet Maku
Hello Maku