logo

Bash 関数

このトピックでは、bash 関数の基本と、それらが bash シェル スクリプトでどのように機能するかを示しました。

Javaの文字列

bash スクリプトの関数は、コードを再利用するための優れたオプションです。 Bash 関数は、bash スクリプト内で複数回呼び出すことができるコマンドのセットとして定義できます。 bash の function の目的は、スクリプトを読みやすくし、同じコードを何度も書かなくて済むようにすることです。また、開発者は複雑で長いコードを、必要なときにいつでも呼び出せる小さな部分に分割することができます。関数はいつでも繰り返し呼び出すことができるため、コードの再利用、最適化、最小化が可能になります。

bash 関数に関する重要なポイントを次に示します。

  • 関数は使用する前にシェル スクリプトで宣言する必要があります。
  • 引数は関数に渡し、関数内で 、 などとしてアクセスできます。
  • ローカル変数は関数内で割り当てることができ、そのような変数のスコープはその特定の関数のみになります。
  • Bash シェルの組み込みコマンドは、関数を使用してオーバーライドできます。

構文

bash 関数を宣言するための構文は、次の 2 つの形式で定義できます。

1. 最初のメソッドは関数名で始まり、その後に括弧が続きます。これは最も推奨され、一般的に使用される方法です。

 function_name () { commands } 

単一行バージョンは次のようになります。

 function_name () { commands; } 

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

 function function_name { commands } 

単一行バージョンは次のようになります。

 function function_name { commands; } 

ほとんどのプログラミング言語と比較して、Bash の機能は多少制限されています。いくつかの例を参考にして概念を理解しましょう。

例: 方法 1

 #!/bin/bash JTP () { echo 'Welcome to Javatpoint.' } JTP 

出力

 Welcome to Javatpoint. 

例: 方法 2

 #!/bin/bash function JTP { echo 'Welcome to Javatpoint.' } JTP 

出力

 Welcome to Javatpoint. 

引数の受け渡し

ほとんどのプログラミング言語と同様に、bash 関数で引数を渡してデータを処理することもできます。コマンド ライン引数を bash スクリプトに渡すのと同じ方法で、データを関数に挿入できます。

bash 関数に任意の数の引数を渡すには、関数名の直後に引数を挿入する必要があります。関数名と引数の間にはスペースを入れる必要があります。また、スペースが含まれる引数の誤解析を防ぐために、引数を二重引用符で囲むことも良い選択です。

開発者モードを無効にする

bash 関数に引数を渡す場合の重要なポイントを次に示します。

  • 指定された引数は、関数名の後の引数の位置に応じて、、、 ... $n としてアクセスされます。
  • このトピックでは、bash 関数の基本と、それらが bash シェル スクリプトでどのように機能するかを示しました。

    bash スクリプトの関数は、コードを再利用するための優れたオプションです。 Bash 関数は、bash スクリプト内で複数回呼び出すことができるコマンドのセットとして定義できます。 bash の function の目的は、スクリプトを読みやすくし、同じコードを何度も書かなくて済むようにすることです。また、開発者は複雑で長いコードを、必要なときにいつでも呼び出せる小さな部分に分割することができます。関数はいつでも繰り返し呼び出すことができるため、コードの再利用、最適化、最小化が可能になります。

    bash 関数に関する重要なポイントを次に示します。

    • 関数は使用する前にシェル スクリプトで宣言する必要があります。
    • 引数は関数に渡し、関数内で $1、$2 などとしてアクセスできます。
    • ローカル変数は関数内で割り当てることができ、そのような変数のスコープはその特定の関数のみになります。
    • Bash シェルの組み込みコマンドは、関数を使用してオーバーライドできます。

    構文

    bash 関数を宣言するための構文は、次の 2 つの形式で定義できます。

    1. 最初のメソッドは関数名で始まり、その後に括弧が続きます。これは最も推奨され、一般的に使用される方法です。

     function_name () { commands } 

    単一行バージョンは次のようになります。

     function_name () { commands; } 

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

     function function_name { commands } 

    単一行バージョンは次のようになります。

     function function_name { commands; } 

    ほとんどのプログラミング言語と比較して、Bash の機能は多少制限されています。いくつかの例を参考にして概念を理解しましょう。

    例: 方法 1

     #!/bin/bash JTP () { echo 'Welcome to Javatpoint.' } JTP 

    出力

     Welcome to Javatpoint. 

    例: 方法 2

     #!/bin/bash function JTP { echo 'Welcome to Javatpoint.' } JTP 

    出力

     Welcome to Javatpoint. 

    引数の受け渡し

    ほとんどのプログラミング言語と同様に、bash 関数で引数を渡してデータを処理することもできます。コマンド ライン引数を bash スクリプトに渡すのと同じ方法で、データを関数に挿入できます。

    bash 関数に任意の数の引数を渡すには、関数名の直後に引数を挿入する必要があります。関数名と引数の間にはスペースを入れる必要があります。また、スペースが含まれる引数の誤解析を防ぐために、引数を二重引用符で囲むことも良い選択です。

    bash 関数に引数を渡す場合の重要なポイントを次に示します。

    • 指定された引数は、関数名の後の引数の位置に応じて、$1、$2、$3 ... $n としてアクセスされます。
    • $0 変数は関数名用に予約されています。
    • $# 変数は、関数に与えられる位置引数/パラメーターの数を保持するために使用されます。
    • $* 変数と $@ 変数は、関数に与えられるすべての引数/パラメータを保持するために使用されます。
      • $* を二重引用符とともに使用すると (つまり、 '$*' )、スペースで区切られた単一の文字列に展開されます。たとえば、「$1 $2 $n など」です。
      • $@ を二重引用符とともに使用すると (つまり、 '$@' )、別の文字列に展開されます。たとえば、「$1」、「$2」、「$n」などです。
      • $* と $# を二重引用符と一緒に使用しない場合、それらは両方とも同じです。

    以下は、関数に引数を渡し、関数内の引数にアクセスする方法の手順を示すコードです。

    Bash スクリプト

     #!/bin/bash #Script to pass and access arguments function_arguments() { echo $1 echo $2 echo $3 echo $4 echo $5 } #Calling function_arguments function_arguments 'We''welcome''you''on''Javatpoint.' 

    出力

    Bash 関数

    このスクリプトでは、function_arguments を呼び出した後に、値「We」、「welcome」、「you」、「on」、および「Javatpoint」を追加しました。これらの値は、 関数の引数 パラメータとしてローカル変数に保存されます。ただし、他の言語とは異なり、インタプリタは渡された値を事前定義された変数に格納し、渡されたパラメータの順序に従って名前が付けられます。

    例えば、

    '私たちは' 単語は変数に格納されます 1
    'いらっしゃいませ' 単語は変数に格納されます 2
    'あなた' 単語は変数に格納されます 3
    'の上' 単語は変数に格納されます 4
    「ジャワポイント」 単語は変数に格納されます 5

    変数のスコープ

    グローバル変数は、スコープに関係なく、スクリプト内のどこからでもアクセスできる変数として定義されます。デフォルトでは、関数内で宣言されている場合でも、すべての変数はグローバル変数として定義されます。変数をローカル変数として作成することもできます。ローカル変数は、?local? を使用して関数本体内で宣言できます。初めて割り当てられるときのキーワード。これらは、その関数内でのみアクセスできます。異なる関数で同じ名前のローカル変数を作成できます。ローカル変数を追加するには、次の構文を使用できます。

     local var_name= 

    Bash スクリプトで変数スコープがどのように機能するかをよりよく理解するには、次の例を確認してください。

    Bash スクリプト

     #!/bin/bash v1='A' v2='B' my_var () { local v1='C' v2='D' echo 'Inside Function' echo 'v1 is $v1.' echo 'v2 is $v2.' } echo 'Before Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' my_var echo 'After Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' 

    出力

    Bash 関数

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

    戻り値

    ほとんどのプログラミング言語には、関数の値を返すという概念があります。これは、関数が元の呼び出し場所にデータを送り返す必要があることを意味します。 「実際の」プログラミング言語の関数とは異なり、Bash 関数は呼び出されたときに値を返すサポートを提供しません。ただし、プログラムまたはコマンドが終了ステータスで終了するのと同様の戻りステータスを設定できます。 bash 関数が完了すると、その戻り値は関数内で最後に実行されたステートメントのステータスになります。成功ステータスの場合は 0 を返し、失敗の場合は 1 ~ 255 の範囲のゼロ以外の 10 進数を返します。

    戻りステータスは、「return」キーワードを使用して示すことができ、変数 $? に割り当てられます。 return ステートメントは関数を終了し、関数の終了ステータスとして機能します。

    例えば、 次のコードを考えてみましょう。

    Bash スクリプト

     #!/bin/bash #Setting up a return status for a function print_it () { echo Hello $1 return 5 } print_it User print_it Reader echo The previous function returned a value of $? 

    出力

    Bash 関数

    関数から値を返すもう 1 つのより良いオプションは、値を次の関数に送信することです。 標準出力 を使用して エコー または プリントフ 以下に示すように、コマンドを実行します。

    Bash スクリプト

     #!/bin/bash print_it () { local my_greet='Welcome to Javatpoint.' echo '$my_greet' } my_greet='$(print_it)' echo $my_greet 

    出力

     Welcome to Javatpoint. 

    コマンドのオーバーライド

    オーバーライドするコマンドと同じ名前の関数を作成することで、bash コマンドをオーバーライドするオプションがあります。たとえば、「echo」コマンドをオーバーライドしたい場合は、「echo」という名前の関数を作成する必要があります。

    bash コマンドをオーバーライドするというこの概念は、特定のオプションを指定してコマンドを使用する場合など、いくつかのシナリオで役立つ場合があります。また、コマンド全体にスクリプト内で複数回のオプションを指定したくない場合にも使用できます。このような場合、コマンドの組み込み bash コマンドをオプションでオーバーライドできます。ここで、いくつかの例を使用して、Bash シェル スクリプトでコマンドをオーバーライドする概念を理解しましょう。

    この例では、「echo」コマンドをオーバーライドし、引数の形式でタイムスタンプを「echo」コマンドに追加しました。

    Bash スクリプト

     #!/bin/bash #Script to override command using function echo () { builtin echo -n `date +'[%m-%d %H:%M:%S]'` ': ' builtin echo $1 } echo 'Welcome to Javatpoint.' 

    出力

    Bash 関数

    結論

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


    変数は関数名用に予約されています。
  • $# 変数は、関数に与えられる位置引数/パラメーターの数を保持するために使用されます。
  • $* 変数と $@ 変数は、関数に与えられるすべての引数/パラメータを保持するために使用されます。
    • $* を二重引用符とともに使用すると (つまり、 '$*' )、スペースで区切られた単一の文字列に展開されます。たとえば、「 $n など」です。
    • $@ を二重引用符とともに使用すると (つまり、 '$@' )、別の文字列に展開されます。たとえば、「」、「」、「$n」などです。
    • $* と $# を二重引用符と一緒に使用しない場合、それらは両方とも同じです。

以下は、関数に引数を渡し、関数内の引数にアクセスする方法の手順を示すコードです。

Bash スクリプト

 #!/bin/bash #Script to pass and access arguments function_arguments() { echo  echo  echo  echo  echo  } #Calling function_arguments function_arguments 'We''welcome''you''on''Javatpoint.' 

出力

Bash 関数

このスクリプトでは、function_arguments を呼び出した後に、値「We」、「welcome」、「you」、「on」、および「Javatpoint」を追加しました。これらの値は、 関数の引数 パラメータとしてローカル変数に保存されます。ただし、他の言語とは異なり、インタプリタは渡された値を事前定義された変数に格納し、渡されたパラメータの順序に従って名前が付けられます。

例えば、

'私たちは' 単語は変数に格納されます 1
'いらっしゃいませ' 単語は変数に格納されます 2
'あなた' 単語は変数に格納されます 3
'の上' 単語は変数に格納されます 4
「ジャワポイント」 単語は変数に格納されます 5

変数のスコープ

グローバル変数は、スコープに関係なく、スクリプト内のどこからでもアクセスできる変数として定義されます。デフォルトでは、関数内で宣言されている場合でも、すべての変数はグローバル変数として定義されます。変数をローカル変数として作成することもできます。ローカル変数は、?local? を使用して関数本体内で宣言できます。初めて割り当てられるときのキーワード。これらは、その関数内でのみアクセスできます。異なる関数で同じ名前のローカル変数を作成できます。ローカル変数を追加するには、次の構文を使用できます。

 local var_name= 

Bash スクリプトで変数スコープがどのように機能するかをよりよく理解するには、次の例を確認してください。

Bash スクリプト

 #!/bin/bash v1='A' v2='B' my_var () { local v1='C' v2='D' echo 'Inside Function' echo 'v1 is $v1.' echo 'v2 is $v2.' } echo 'Before Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' my_var echo 'After Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' 

出力

Bash 関数

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

戻り値

ほとんどのプログラミング言語には、関数の値を返すという概念があります。これは、関数が元の呼び出し場所にデータを送り返す必要があることを意味します。 「実際の」プログラミング言語の関数とは異なり、Bash 関数は呼び出されたときに値を返すサポートを提供しません。ただし、プログラムまたはコマンドが終了ステータスで終了するのと同様の戻りステータスを設定できます。 bash 関数が完了すると、その戻り値は関数内で最後に実行されたステートメントのステータスになります。成功ステータスの場合は 0 を返し、失敗の場合は 1 ~ 255 の範囲のゼロ以外の 10 進数を返します。

戻りステータスは、「return」キーワードを使用して示すことができ、変数 $? に割り当てられます。 return ステートメントは関数を終了し、関数の終了ステータスとして機能します。

numpy ドット積

例えば、 次のコードを考えてみましょう。

Bash スクリプト

 #!/bin/bash #Setting up a return status for a function print_it () { echo Hello  return 5 } print_it User print_it Reader echo The previous function returned a value of $? 

出力

np.ヒストグラム
Bash 関数

関数から値を返すもう 1 つのより良いオプションは、値を次の関数に送信することです。 標準出力 を使用して エコー または プリントフ 以下に示すように、コマンドを実行します。

Bash スクリプト

 #!/bin/bash print_it () { local my_greet='Welcome to Javatpoint.' echo '$my_greet' } my_greet='$(print_it)' echo $my_greet 

出力

 Welcome to Javatpoint. 

コマンドのオーバーライド

オーバーライドするコマンドと同じ名前の関数を作成することで、bash コマンドをオーバーライドするオプションがあります。たとえば、「echo」コマンドをオーバーライドしたい場合は、「echo」という名前の関数を作成する必要があります。

bash コマンドをオーバーライドするというこの概念は、特定のオプションを指定してコマンドを使用する場合など、いくつかのシナリオで役立つ場合があります。また、コマンド全体にスクリプト内で複数回のオプションを指定したくない場合にも使用できます。このような場合、コマンドの組み込み bash コマンドをオプションでオーバーライドできます。ここで、いくつかの例を使用して、Bash シェル スクリプトでコマンドをオーバーライドする概念を理解しましょう。

この例では、「echo」コマンドをオーバーライドし、引数の形式でタイムスタンプを「echo」コマンドに追加しました。

Bash スクリプト

 #!/bin/bash #Script to override command using function echo () { builtin echo -n `date +'[%m-%d %H:%M:%S]'` ': ' builtin echo  } echo 'Welcome to Javatpoint.' 

出力

Bash 関数

結論

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