Linuxシェルスクリプトにおけるreturnの使い方|関数から値を返す仕組みを理解しよう

Linuxのシェルスクリプトでは、処理を効率的に行うために関数を定義して使うことがよくあります。関数内で何かしらの処理を行い、その結果を呼び出し元に返したい場面も多いでしょう。そのときに使われるのがreturnです。ただし、Linuxのbashなどのシェルにおけるreturnは、他のプログラミング言語のように「値」を返すというよりも、「終了ステータス」を返すという少し違った仕組みになっています。本記事では、Linuxの関数からreturnで値を返す方法と、その使い分け、注意点について、具体的な例を交えて解説していきます。


シェルスクリプトにおける関数の基本

まずはLinuxシェルにおける関数の基本的な書き方を確認しましょう。関数は次のように定義します。

my_function() {
echo "Hello from function"
}

あるいは、以下のような書き方もできます。

function my_function {
echo "Hello from function"
}

関数を呼び出すには、単純に関数名を書くだけです。

my_function

このように、シェルスクリプトではとても簡単に関数を使うことができます。


returnの役割は「終了ステータス」を返すこと

シェルスクリプトで使うreturnは、一般的なプログラミング言語のように「数値や文字列の値を返す」のではなく、「終了ステータス」を返します。終了ステータスは整数値(0〜255)で、通常は0が「成功」、それ以外が「エラー」や「失敗」を意味します。

check_even() {
if (( $1 % 2 == 0 )); then
return 0 # 成功
else
return 1 # 失敗
fi
}

check_even 4
if [ $? -eq 0 ]; then
echo "偶数です"
else
echo "奇数です"
fi

この例では、check_even関数が引数の値を2で割った余りによって、0(成功)または1(失敗)をreturnしています。


returnで返せるのは0〜255まで

注意すべきなのは、returnで返せる値の範囲です。シェルスクリプトにおける終了ステータスは8ビット整数(0〜255)に制限されているため、それ以外の数値を返そうとすると、モジュロ256(256で割った余り)になります。

myfunc() {
return 300
}

myfunc
echo $? # 結果は44(300 % 256)

このように、300を返しているつもりでも、実際に返されるのは44です。この制限に注意しないと、バグの原因になります。


数値や文字列の「値」を返したい場合はechoを使う

returnでは値を返せない場合、どうやって値を関数から取得するかというと、一般的にはechoで出力し、コマンド置換で値を受け取ります。

get_sum() {
local result=$(( $1 + $2 ))
echo $result
}

sum=$(get_sum 5 8)
echo "合計は: $sum"

この例では、get_sum関数の中でechoを使って計算結果を出力し、その出力を$()でコマンド置換してsumに代入しています。これにより、まるで値を返しているかのように使うことができます。


複数の値を返すテクニック

複数の値を返したい場合も、echoと配列、あるいは標準出力の処理を工夫することで実現できます。

get_info() {
local name="John"
local age=30
echo "$name $age"
}

read username userage <<< $(get_info)
echo "名前: $username"
echo "年齢: $userage"

このように、関数で複数の情報を出力し、それをreadで変数に分割することで複数の値を扱うことができます。


実用例:ファイルが存在するかチェックする関数

実際のスクリプトでよく使われるreturnの使い方のひとつが、ファイルの存在チェックです。

check_file_exists() {
if [ -f "$1" ]; then
return 0
else
return 1
fi
}

filename="sample.txt"
check_file_exists "$filename"
if [ $? -eq 0 ]; then
echo "$filename は存在します"
else
echo "$filename は存在しません"
fi

この関数では、指定したファイルが存在するかどうかを確認し、終了ステータスとして結果を返しています。


戻り値の使い分け:returnかechoか?

まとめると、シェルスクリプトで関数から「値」を返すには以下のように使い分けます。

使用方法用途返せるもの
return成功/失敗などのステータスを伝える0〜255の整数(終了コード)
echo+コマンド置換計算結果などの「値」を返したいとき任意の文字列や数値

どちらも用途に応じて使い分けることが重要です。


まとめ:シェル関数のreturnの本質を理解しよう

Linuxシェルスクリプトにおけるreturnは、単に「結果」を返すのではなく「終了ステータス」を返すためのものです。本格的に値を返したいときはechoとコマンド置換を併用することで、柔軟な関数設計が可能になります。

シェルスクリプトはシンプルな構文で奥が深い世界です。returnの仕組みと役割を正しく理解し、実用的な関数をどんどん活用して、効率的なスクリプト作成を目指しましょう。

タイトルとURLをコピーしました