以下のいずれかの構文を利用して、関数を定義することができます。
function funcname {
<shell commands...>
}
funcname() {
<shell commands...>
}
開き括弧 ({
) は、上記のように関数名と同じ行に記述してもよいし、次の行に単独で記述してもよいです。
定義されている関数を削除するには以下のようにします。
unset -f funcname
現在のログインセッションでどんな関数が定義されているかを調べるには以下のようにします。
$ declare -F # 関数名のみ出力
$ declare -f # 関数の定義も出力
関数はスクリプトとは違い、実行したシェルと同じプロセスで実行されます。 つまり、以下のように関数内で環境変数を設定すれば、関数を呼び出したシェルにも反映されます。
myfunc() {
export AAA=100
}
中身が空の関数が定義されていると、構文エラーが発生するようです。
myfunc() {
# syntax error
}
$ ./sample.sh
./sample.sh: 行 3: 予期しないトークン `}' 周辺に構文エラーがあります
./sample.sh: 行 3: `}'