Bash で関数を使用する方法
関数はすべてのプログラミング言語において最も重要な要素の一つであり、コードを再利用可能で読みやすいものにしてくれます。繰り返し使われる同じコードは、関数の中に書かれています。そして、コードブロックが必要なときは、定義された関数を呼び出すだけです。
Bash で関数を定義する
Bash
で関数を定義するには、以下の 2つのアプローチのいずれかを用いることができます。
このアプローチでは、関数名の後に括弧をつけて書きます。この方法では、関数名の後に括弧をつけて記述します。この形式を用いた関数は、以下のいずれかの形式を用いて定義することができます。
function_name(){
statements
}
function_name() { statements }
この方法では、関数名の前に function
キーワードを指定します。
function_name(){
statements
}
function_name() { statements }
中括弧内の文は、その関数が何をするかを決定します。関数名はその関数が何をするかとは何の関係もありませんが、関数名は説明的なものにしなければなりません。関数を定義しても何もしません。関数の定義にあるコマンドを実行するには、関数を呼び出さなければならません。
Bash で関数を呼び出すには、関数の名前を使用します。
#! /bin/bash
greet(){
echo 'Hello, Folks. Welcome to DelftStack!'
}
greet
出力:
Hello, Folks. Welcome to DelftStack!
ここでは、最初に greet
という名前で関数を定義してから関数を呼び出す。関数を呼び出すと、関数定義の中の文が実行されるので、Hello, Folks. Welcome to DelftStack!
別のアプローチを使用して関数を次のように定義することもできます。
#! /bin/bash
function greet(){
echo 'Hello, Folks. Welcome to DelftStack!'
}
greet
出力:
Hello, Folks. Welcome to DelftStack!
関数を呼び出す前に、必ず関数を定義する必要があります。
Bash における変数の範囲
Bash では他のプログラミング言語と同様に、変数のスコープはグローバルかローカルのどちらかになります。しかし、変数のデフォルトのスコープは、関数スコープ内で宣言されていても常にグローバルです。変数をローカルにするには local
キーワードを使わなければなりません。
#! /bin/bash
gvar1=1
gvar2=2
change_variables() {
local gvar1=10
gvar2=7
echo "Inside Function: gvar1: $gvar1, gvar2: $gvar2"
}
echo "Before executing function: gvar1: $gvar1, gvar2: $gvar2"
change_variables
echo "After executing function: gvar1: $gvar1, gvar2: $gvar2"
出力:
Before executing function: gvar1: 1, gvar2: 2
Inside Function: gvar1: 10, gvar2: 7
After executing function: gvar1: 1, gvar2: 7
ここでは、先頭に宣言された gvar1
と gvar2
がグローバル変数です。
関数内部では、gvar1
で local
キーワードを使っているので、gvar1
はローカル変数として宣言されているが、gvar2
は local
キーワードを持っていないので、グローバル変数を参照していることになります。したがって、gvar2
の値は関数によってグローバルに変更され、gvar1
の値は関数内でのみ変更されることになります。
Bash の関数からの戻り値
他のプログラミング言語とは逆に、Bash は関数から値を返すことができません。Bash の関数から返される値は、関数内で最後に実行された文の状態です。0
の数字は成功を、1-255
の数字は失敗を表します。関数の終了ステータスは return
キーワードを用いて指定することができます。また、return
文は関数を終了させる。
#! /bin/bash
return_value(){
echo "This function returns 20!"
return 30
echo "After return statement"
}
return_value
echo $?
出力:
This function returns 20!
30
ここでは、関数 return_value
が return
文を用いて 30
という値を返し、その値が変数 $?
に代入されていることがわかります。
また、return
文以下のコマンドは実行されないため、return
文の実行後に関数が終了することにも注意する必要があります。
関数から値を返したい場合は、グローバル変数に値を代入し、関数の外部からその変数にアクセスして値を取得することができます。
#! /bin/bash
send_message(){
message_from_function="Hello From the function!"
}
send_message
echo $message_from_function
出力:
Hello From the function!
プログラムでは、返す値をグローバル変数 message_from_function
に代入して、変数の戻り値にアクセスしています。
Bash 関数への引数の渡し方
Bash の関数に引数を渡すには、関数の後に引数を置くだけです。複数の引数を関数に渡したい場合は、引数をスペースで区切ります。引数のスペルミスを避けるために、引数をダブルクォートで囲むことができます。
パラメータは、その位置に応じて $1
$2
などでアクセスされます。$0
は関数名を表し、$#
は関数内の位置引数の数を保持します。
#! /bin/bash
send_message(){
message_from_function="Hello $1 "
}
send_message
echo $message_from_function "Delft!"
出力:
Hello Delft!
ここでは、引数 Delft!
が関数に渡され、パラメーター $1
によって関数内でアクセスされ、関数からの最終出力として Hello Delft!
が取得されます。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn