Bash の関数に配列を渡す
この小さなプログラミング チュートリアルでは、Bash スクリプトで関数を使用し、それらに配列を渡します。 実際のトピックに移る前に、Bash スクリプトについて簡単に紹介します。
Bash スクリプト ファイルには、一連の Bash コマンドが含まれています。 これらのコマンドは、コマンド ラインで頻繁に入力するコマンド (ls
や cp
など) と、コマンド ラインで入力できるコマンドを組み合わせたものです。
コマンド ラインで入力して実行できるコマンドは、スクリプト ファイルに含めて実行すると、同じアクションを実行します。
Bash スクリプトの関数
シェル スクリプトでは、再利用可能なコード ブロックは Bash 関数を使用してグループ化されます。 ほとんどのプログラミング言語はこの機能をサポートしており、プロシージャ、メソッド、サブルーチンなどの他の名前でも参照されています。
再利用可能なコード セクションを 1つの名前で格納する方法は、Bash 関数と呼ばれます。 Bash スクリプトを作成するときに関数を使用すると、次の 2つの利点があります。
- 関数をシェルのメモリに直接読み込むと、後で使用するために関数を保存できます。 今日のコンピューターには十分なメモリがあるため、同じコードを繰り返し記述するよりも、関数を使用する方が高速です。
- 長いシェル スクリプトは、関数を使用して再利用可能なモジュール コード ブロックに分割できます。 チャンクは、作成と維持がより簡単です。
Bash で関数を宣言する
Bash で関数を宣言するには、次の 2つの方法があります。
-
関数を宣言する 1つの方法は、次のように関数の名前のみを使用することです。
<function_name> () { <set of commands> }
-
もう 1つの方法は、次のように
function
キーワードを使用することです。function <function_name> { < set of commands> }
両方のタイプの宣言について、次のような 1 行の宣言を使用することもできます。
function <function_name> { <set of commands>; }
関数を使用するときは、次の点に注意する必要があります。
- Bash スクリプトを使用するか、ターミナルを直接使用するかに関係なく、1 行で記述されたコマンドはセミコロン (
;
) で終了する必要があります。 function
予約語を追加する場合、括弧はオプションです。- 関数の本体は、中括弧または
の間に表示されるコマンドで構成されます。 本文では、任意の数の宣言、変数、ループ、または条件文を使用できます。 - 説明的な関数名を付けるようにしてください。 わかりやすい名前は、他の開発者がコードを見るときに役立ちますが、関数やコマンドをテストするときには必須ではありません。
Bash で関数を呼び出す
関数を呼び出すには、その名前を使用します。 関数が呼び出される前に宣言されていることを確認してください。
以下のコードを見てみましょう。
#!/bin/Bash
func1 () {
echo Hello from function
echo Good Bye!
}
func1
このコードは、次の出力を提供します。
Bash の関数引数
関数に引数を渡す場合は、関数呼び出しの後にパラメーターを追加し、スペースで区切る必要があります。 Bash 関数の引数の操作には、次の表に示すいくつかのオプションがあります。
口論 | 目的 |
---|---|
$0 |
関数がターミナルで定義されると、その名前が保存されます。 Bash スクリプトで指定すると、$0 はスクリプトの名前と場所を出力します。 |
$1 、$2 など |
これは、関数名に続く引数の位置に対応します。 |
$# |
これは、総数のカウントを示します。 渡された引数の数。 |
$@ と $* |
これにより、渡された引数の配列またはリスト型が保存されます。 |
"$@" |
渡されたリストを、"$1", "$2" などの個別の引数に分割します。 |
Bash の関数に配列を渡す
以下の例では、配列リストを関数に渡します。関数はそれを個別の変数に分割し、画面に出力します。
#!/bin/Bash
function printArray() {
a=("$@")
for b in "${a[@]}";
do
echo "$b"
done
}
array=("first" "second" "third")
printArray "${array[@]}
関数を呼び出すときに、括弧で囲まれたリストとして引数を渡したことに注意してください。 これにより配列が作成され、関数はそれらを $@
に保存します。
次に、その配列をループで出力しました。
出力: