Linux/シェルスクリプト/関数

Linux/シェルスクリプト/関数

シェルスクリプトの関数は特に入出力が何かというモノではなく、単なる処理の集合体と捉える。

実際には関数は関数ではなく、小さいコマンドと捉えたほうがしっくりくるし、構造もそうなっている。

関数を作る

関数はこのように function をつけて宣言するか

function hoge() {
    return 0
}

それを省略してもよい。省略されることのほうが多いようだ。

hoge() {
    return 0
}

関数の呼び出し

関数の呼び出しは何もなく、コマンドのように書くだけである

hoge

関数へのパラメータ渡し

関数へのパラメータは関数名に加えてズラズラ書くだけ。つまりコマンドと同じである。 内部では自動的にそれに番号が振られて、それを利用することができる。 特に受け取る記述は無い。

hoge() {
    echo $1
    echo $2
    echo $3
    echo $4
}
hoge 2 4 6 8  # => 2 4 6 8

関数の戻り値

戻りは所謂関数と同様に return で戻す。 しかしシェルスクリプトの関数の戻り値は基本的にエラーコードであり、実行の結果ではない。

ゼロを戻すと正常終了したとみなすのが慣例

hoge () {
    return 0
}

なので所謂プログラム言語での関数の戻り値は echo で標準出力に吐き出すようにするよう設計する。

hoge () {
    echo 'hogehoge'
    return 0
}

使う側はそれをこのようにバッククォートで関数の実行結果として変数に割り当てることで所謂「戻り値」として得る。

piyo=`hoge`
echo $piyo  # hogehoge

シェルスクリプトの関数は必ずなんらかの値を戻さねばならず、まったく空っぽの関数というのは作ることができない。

# こういうのダメ
hoge () {
}

関数内の変数のスコープ

関数内でも変数のスコープはグローバルである。 なので、外部を書き換えまくるし、内部がダダ漏れになる。

そこで local キーワードがあり、これを付加した変数は関数内スコープに収まる。 つまり常にこれ使えという話だ。

そしてこの記述で宣言的な記述と代入的な記述を同時にやると処理内容によっては文法エラーだと言われたりするので 分離して記述しておいたほうがよい

hoge() {
    local piyo
    piyo="piyopiyo"        # 関数スコープ
    fuga="fugafuga"        # グローバル
}

自分流関数の組み方テンプレ

function
linux/shell_script/function.txt · 最終更新: 2019-03-20 19:02 by ore