このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:シェル関数内での位置パラメータ

シェル関数内での位置パラメータ

 シェルスクリプトを作成する際、同じ処理を何度も繰り返す場面があります。そのような場合、シェル関数を利用することで、コードの再利用性を高め、スクリプトの可読性を向上させることができます。

 しかし、シェル関数内での位置パラメータの扱いには注意が必要です。通常、$1$2$3 などの位置パラメータは、スクリプトに渡されたコマンドライン引数を参照しますが、関数内では関数に渡された引数を参照します。

ここでは、シェル関数内での位置パラメータの扱い方について、具体的な例を通して解説します。

シェル関数内の位置パラメータの基本

 シェル関数内では、位置パラメータ $1$2$3 などは、関数に渡された引数を参照します。一方、$0 は特殊パラメータであり、関数内でもスクリプト名を保持します。

位置パラメータの比較

パラメータスクリプト全体での意味関数内での意味
$0スクリプトの名前スクリプトの名前(変わらない)
$1スクリプトの第1引数関数の第1引数
$2スクリプトの第2引数関数の第2引数
$3スクリプトの第3引数関数の第3引数
.........

シェル関数での位置パラメータの確認

 次に、位置パラメータを3つ扱うシェルスクリプトを作成し、関数内での位置パラメータの動作を確認してみましょう。

スクリプトの作成:func-parameters.sh

ステップ1:スクリプトファイルの作成

user01@ubuntu:~$ nano func-parameters.sh

ステップ2:スクリプトの内容を記述

func-parameters.sh の内容

#!/bin/bash

print_parameters ()
{
    echo "数値1: $1"
    echo "数値2: $2"
    echo "数値3: $3"
    echo
    echo "関数に渡された引数の数: $#"
    echo "スクリプト名: $0"
}

print_parameters 10 20 30

解説

  • 関数 print_parameters の定義
    $1$2$3 は関数に渡された引数を参照しています。
    $# は関数に渡された引数の数を示します。
    $0 はスクリプトの名前を示します(関数内でも変わりません)。
  • 関数の呼び出し
    print_parameters 10 20 30 により、関数に数値 102030 を引数として渡しています。

ステップ3:実行権限の付与

user01@ubuntu:~$ chmod +x func-parameters.sh
user01@ubuntu:~$ chmod +x func-parameters.sh

スクリプトの実行

user01@ubuntu:~$ ./func-parameters.sh

実行結果

数値1: 10
数値2: 20
数値3: 30

関数に渡された引数の数: 3
スクリプト名: ./func-parameters.sh

解説

  • 数値の表示
    ・関数内の $1$2$3 がそれぞれ 102030 を参照しています。
  • 引数の数
    $# により、関数に渡された引数の数が 3 と表示されています。
  • スクリプト名の表示
    $0 はスクリプト名 ./func-parameters.sh を示しています。

コマンドライン引数との関係

スクリプト自体にコマンドライン引数を渡しても、関数内の位置パラメータには影響しません。

例:スクリプトに引数を渡して実行

user01@ubuntu:~$ ./func-parameters.sh arg1 arg2

実行結果

数値1: 10
数値2: 20
数値3: 30

関数に渡された引数の数: 3
スクリプト名: ./func-parameters.sh

解説

  • 関数 print_parameters に渡された引数は変わらず 102030 です。
  • スクリプトに渡した引数 arg1arg2 は、関数内の位置パラメータには影響を与えていません。

関数内での位置パラメータの動作

  • 関数への引数
    ・関数を呼び出す際に渡した引数が、関数内の位置パラメータ $1$2$3 に対応します。
  • スクリプトの引数
    ・スクリプト自体に渡されたコマンドライン引数は、関数内では参照されません。

シェル関数の引数が位置パラメータとして参照される

print_parameters 10 20 30

10 → $1
20 → $2
30 → $3

  • このように、関数に渡された引数が関数内の位置パラメータとして扱われます。
  • $0 は特殊パラメータであり、関数内でもスクリプト名を保持します。

作成したシェルスクリプトの削除

テストが完了したら、スクリプトを削除します。

user01@ubuntu:~$ rm func-parameters.sh

まとめ

  • シェル関数内の位置パラメータ
    ・関数内の $1$2$3 は、関数に渡された引数を参照します。
    ・スクリプトのコマンドライン引数とは別に扱われます。
  • 特殊パラメータ $0
    ・関数内でもスクリプト名を示します。
    $1$2 とは異なり、関数名にはなりません。
  • 関数の活用
    ・同じ処理を繰り返し使う場合は、関数にまとめると効率的です。
    ・関数内での位置パラメータの扱いを理解することで、より柔軟なスクリプトが書けます。

シェル関数内での位置パラメータの扱いを正しく理解し、スクリプト作成に活用してみてください。