シェル関数は複数のコマンドをひとまとめにしたものです。引数の取得では、シェルスクリプトの引数と同じ名称の特殊変数を使用します。また、独自のローカル変数を用意することができないため、関数外で使用されている変数の内容を書き換えてしまう危険性があります。
sample.sh
#!/bin/sh
echo1(){
echo 1
}
echo1
実行例
$ sh sample.sh
1
一行でまとめるためには、セミコロンが必要です。
sample.sh
#!/bin/sh
echo1(){ echo 1; }
echo1
実行例
$ sh sample.sh
1
シェルスクリプトでは、関数のためのローカル変数が用意できません。関数内で変数を使用するときは注意しましょう。
sample.sh
#!/bin/sh
VAR=128
func(){
VAR=256
}
func
echo $VAR
実行例
$ sh sample.sh
256
こちらのページで紹介しました、シェルスクリプトの引数と全く同じ名称の特殊変数で関数の引数を取得できます。UNIXによっては、関数呼び出し時にシェルスクリプトの引数が格納されていた$1,$2,...の内容を上書きしてしまうため、事前に他の変数に保存しておくなどの工夫が必要です。
sample.sh
#!/bin/sh
func(){
echo $#
echo $1
}
func 128 dummy dummy
実行例
$ sh sample.sh
3
128
こちらのページで紹介しました、直前に実行したコマンドの終了ステータスが格納される特殊変数を利用して関数からの返り値を取得します。
sample.sh
#!/bin/sh
func(){
return 8
}
func
echo $?
実行例
$ sh sample.sh
8