アンドロイド

バッシュ関数

零舞  ( [æ±äº¬ç†ç§‘å¤§å¦ ã‚½ãƒ¼ãƒ©ãƒ³ (Soran...

零舞  ( [æ±äº¬ç†ç§‘å¤§å¦ ã‚½ãƒ¼ãƒ©ãƒ³ (Soran...

目次:

Anonim

Bash関数は基本的に、何度も呼び出すことができるコマンドのセットです。 関数の目的は、bashスクリプトをより読みやすくし、同じコードを何度も何度も記述しないようにすることです。

ほとんどのプログラミング言語と比較して、Bash関数は多少制限されています。 このチュートリアルでは、Bash関数の基本を取り上げ、シェルスクリプトでそれらを使用する方法を示します。

バッシュ関数宣言

bash関数を宣言するための構文は非常に単純です。 次の2つの異なる形式で宣言できます。

  1. 最初の形式は関数名で始まり、その後に括弧が続きます。 これは優先され、より使用される形式です。

    function_name () { commands }

    単一行バージョン:

    function_name () { commands; }

    2番目の形式は、 function 予約語で始まり、その後に関数名が続きます。

    function function_name { commands }

    単一行バージョン:

    function function_name { commands; }

注意すべき点はほとんどありません:

  • 中括弧 {} で囲まれたコマンドリストは、関数の本体です。 関数の本体を囲む中括弧は、スペースまたは改行で本体から分離する必要があります。関数を定義しても実行されません。 bash関数を呼び出すには、単に関数名を使用します。 中括弧で囲まれたコマンドは、シェルスクリプトで関数が呼び出されるたびに実行されます。関数定義は、関数を呼び出す前に配置する必要があります ; 関数の最後のコマンドに従う必要があります。関数名は常に説明的なものにしてください。

これをよりよく理解するには、次の例を見てください。

〜/ hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

コードを行ごとに分析してみましょう。

  • 3行 3 では、関数に名前を付けて定義し、関数の本体の開始を示す中括弧 { を開きます 4 は関数の本体です。 関数の本体には、複数のコマンドと変数宣言を含めることができます。行 5 、閉じ中括弧 } は、 hello_world 関数の終わりを定義します。行 7 では、関数を実行しています。 この関数は、必要な回数だけ実行できます。

スクリプトを実行すると、 hello, world ます。

変数の範囲

グローバル変数は、スコープに関係なく、スクリプトのどこからでもアクセスできる変数です。 Bashでは、関数内で宣言されている場合でも、デフォルトですべての変数がグローバルとして定義されています。

ローカル変数は、 local キーワードを使用して関数本体内で宣言でき、その関数内でのみ使用できます。 異なる関数で同じ名前のローカル変数を持つことができます。

Bashで変数スコープがどのように機能するかをよりわかりやすく説明するために、例を考えてみましょう。

〜/ variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

スクリプトは、2つのグローバル変数 var1 var2 定義することから始まります。 次に、ローカル変数 var1 を設定し、グローバル変数 var2 を変更する var2

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

上記の出力から、次のように結論付けることができます。

  • 既存のグローバル変数と同じ名前で関数本体内にローカル変数を設定すると、グローバル変数よりも優先されます。グローバル変数は関数内から変更できます。

戻り値

「実際の」プログラミング言語の関数とは異なり、Bash関数では、呼び出されたときに値を返すことはできません。 bash関数が完了すると、戻り値は関数で最後に実行されたステートメントのステータス、成功の場合は 0 、失敗の場合は1〜255の範囲のゼロ以外の10進数です。

戻りステータスは、 return キーワードを使用して指定でき、変数 $? 割り当てられ $? return ステートメントは関数を終了します。 関数の終了ステータスと考えることができます。

〜/ return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

実際に関数から任意の値を返すには、他のメソッドを使用する必要があります。 最も簡単なオプションは、関数の結果をグローバル変数に割り当てることです。

〜/ return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

関数から値を返す別のより良いオプションは、次に示すようにechoまたは printf を使用して値を stdout に送信することです。

〜/ return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

メッセージをstdoutに出力する関数を単に実行する代わりに、 $() コマンド置換を使用して、関数出力を func_result 変数に割り当てています。 変数は必要に応じて後で使用できます。

Bash関数への引数の受け渡し

bash関数に任意の数の引数を渡すには、関数名の直後にスペースで区切ってそれらを配置します。 引数にスペースを含む誤解析を避けるために、引数を二重引用符で囲むことをお勧めします。

  • 渡されるパラメーターは、関数名の後のパラメーターの位置に対応する $1 $2 $3 $n です。 $n $0 変数は、関数名のために予約されています。 $# 変数は、に渡される位置パラメーター/引数の数を保持します関数: $* および $@ 変数は、関数に渡されるすべての位置パラメーター/引数を保持します。
    • 二重引用符で囲まれた場合、 "$*" はスペース(IFSの最初の文字)で区切られた単一の文字列- "$1 $2 $n" "$@" 展開されます。二重引用符で囲まれた場合、 "$@" "$1" "$2" "$n" 二重引用符で囲まれていない場合、 $* $@ は同じです。

以下に例を示します。

〜/ passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

結論

Bash関数は、特定の操作を実行するために設計された再利用可能なコードのブロックです。 定義した関数は、スクリプト内で複数回呼び出すことができます。

また、Bash関数を使用して、より長いコマンドのために記憶に残るショートカットコマンドを作成する方法について読むこともできます。

バッシュターミナル