Linuxのシェルスクリプトでは、処理を効率的に行うために関数を定義して使うことがよくあります。関数内で何かしらの処理を行い、その結果を呼び出し元に返したい場面も多いでしょう。そのときに使われるのがreturn
です。ただし、Linuxのbash
などのシェルにおけるreturn
は、他のプログラミング言語のように「値」を返すというよりも、「終了ステータス」を返すという少し違った仕組みになっています。本記事では、Linuxの関数からreturn
で値を返す方法と、その使い分け、注意点について、具体的な例を交えて解説していきます。
まずはLinuxシェルにおける関数の基本的な書き方を確認しましょう。関数は次のように定義します。
my_function() {
echo "Hello from function"
}
あるいは、以下のような書き方もできます。
function my_function {
echo "Hello from function"
}
関数を呼び出すには、単純に関数名を書くだけです。
my_function
このように、シェルスクリプトではとても簡単に関数を使うことができます。
シェルスクリプトで使う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
で返せる値の範囲です。シェルスクリプトにおける終了ステータスは8ビット整数(0〜255)に制限されているため、それ以外の数値を返そうとすると、モジュロ256(256で割った余り)になります。
myfunc() {
return 300
}
myfunc
echo $? # 結果は44(300 % 256)
このように、300を返しているつもりでも、実際に返されるのは44です。この制限に注意しないと、バグの原因になります。
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 | 成功/失敗などのステータスを伝える | 0〜255の整数(終了コード) |
echo +コマンド置換 | 計算結果などの「値」を返したいとき | 任意の文字列や数値 |
どちらも用途に応じて使い分けることが重要です。
Linuxシェルスクリプトにおけるreturn
は、単に「結果」を返すのではなく「終了ステータス」を返すためのものです。本格的に値を返したいときはecho
とコマンド置換を併用することで、柔軟な関数設計が可能になります。
シェルスクリプトはシンプルな構文で奥が深い世界です。return
の仕組みと役割を正しく理解し、実用的な関数をどんどん活用して、効率的なスクリプト作成を目指しましょう。