Bash スクリプトで関数( function ) を定義する方法についてメモ。
Bash における関数の基本的な定義方法と、関数間で引数を伝搬させる方法について書いていく。
Bashにおける関数の記述方法
Bashにおいて関数を定義するには、主に2つの方法がある。
1つはfunctionキーワードを使用する方法、もう1つはキーワードを使用せずに関数名の後に()
を付ける方法。
関数の定義方法
function
キーワードを使用する方法
function my_function1() {
echo "This is a function1"
}
function
キーワードを使用しない方法
my_function2() {
echo "This is a function2"
}
function
キーワードは任意のため、どちらも同じように機能する。
関数の呼び出し方法
定義された関数を呼び出すには、関数名をそのままコマンドのように使用する。
例:
my_function # my_functionを呼び出す
引数を関数に渡す場合は、関数名の後にスペースを空けて引数を記述する。
my_function "arg1" "arg2" # 2つの引数を持つmy_functionを呼び出す
実際にやってみる
func_test.sh
を作成して実行してみる。
# func_test.sh の中身確認
$ cat func_test.sh
#! /bin/bash
function my_function1 {
echo "This is a function1"
}
my_function2() {
echo "This is a function2"
}
my_function1
my_function2
# func_test.sh 実行
$ bash func_test.sh
This is a function1
This is a function2
Bashスクリプトファイル内の関数をターミナルで使用する
Bash スクリプトファイルで定義した関数をターミナルのコマンドとして使いたい場合、関数を含むスクリプトファイルをソース化してしまうのが早い。
そのためには source
コマンドまたは .
(ドット)コマンドを使用する(source .bashrc
とかやったことがある人も多いと思う)。
例として、上記の func_test.sh
をソース化してみる。
$ source func_test.sh
# または
$ . func_test.sh
# コマンドとして実行
$ my_function1
This is a function1
おまけ: 関数間で引数を伝搬させる
以下では、2つの引数を first_function
から second_function
に伝搬させるコード (function2function_test.sh
)
#!/bin/bash
# 最初の関数を定義
function first_function {
msg1=$1 # 最初の引数
msg2=$2 # 二番目の引数
echo "First function: ${msg1}, ${msg2}"
# 第二の関数に引数を伝搬
second_function "${msg1}" "${msg2}"
}
# 第二の関数を定義
function second_function {
msg1=$1 # 最初の引数
msg2=$2 # 二番目の引数
echo "Second function: ${msg1}, ${msg2}"
}
# 最初の関数を引数とともに実行
first_function "Hello" "Bash"
実行してみる
$ bash function2function_test.sh
First function: Hello, Bash
Second function: Hello, Bash
めでたし!