使い方
シェルスクリプトで関数を定義する。
function greeting () { echo "Hello, $1" return 0 }
関数を呼び出す。
greeting "World"
参考:
シェルスクリプトの関数の使い方!一通りまとめ | エンジニアの入り口
シェルスクリプトで関数を作成する方法 | server-memo.net
関数の使用方法 | UNIX & Linux コマンド・シェルスクリプト リファレンス
Create and Use Bash Functions | Like Geeks
What’s the use of parentheses `()` in shell function definition? – Ask Ubuntu
変数のスコープ
- 関数内で初めて使用した変数であっても、デフォルトではグローバル変数となる。
- ローカル変数を宣言するには、
local
コマンドを使用する。
ドキュメント:
local – Bash Builtins | Bash Reference Manual
参考:
declare – 変数の local スコープ | ゲンゾウ用ポストイット
local コマンドの使い方 | UNIX/Linux の部屋
グローバル変数
参考:
declare – 変数の global スコープ/参照渡し | ゲンゾウ用ポストイット
引数を渡す
参考:
bash の引数 (関数の引数・位置パラメータ) についてのまとめ | それマグで!
Pass arguments into a function – Linux Shell Scripting Tutorial | A Beginner’s handbook
How to pass parameters to function in a bash script? – Unix & Linux Stack Exchange
Passing parameters to a Bash function – Stack Overflow
引数の数
$ function count () { \ echo "$#"; \ } $ count "foo" "bar" "baz" 3
参考:
Find Number of Arguments Passed | nixCraft
配列を渡す
参考:
Passing Array to Function in Bash shell – nixCraft Linux/Unix Forum
How to pass an array as function argument? – Ask Ubuntu
参照渡し
渡された外部の変数を書き換えることができる。
$ function say () \ { \ local -n ref=$1; \ ref="bye"; \ } $ greeting="hello" $ echo $greeting hello $ say greeting $ echo $greeting bye
参考:
Passing arguments by reference – Stack Overflow
Call by Reference
参考:
How to use call-by-reference on an argument in a bash function – Unix & Linux Stack Exchange
expand variable in a variable – Stack Overflow
子プロセスに引き継ぐ (export)
指定した関数を export -f
コマンドで子プロセスとして起動するシェルに引き継げるようになる。
$ export -f hoge
xargs
で関数を使用する場合は、export
した上で bash -c
コマンドを使用する。
$ ls | xargs bash -c hoge
参考:
xargs で function を呼び出す話。- Qiita
xargs に Bash の function を渡す方法 | wrist blog
Can I “export” functions in Bash? – Unix & Linux Stack Exchange
エイリアスと関数の使い分け
参考: