このページで解説している内容は、以下の 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
により、関数に数値10
、20
、30
を引数として渡しています。
ステップ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
がそれぞれ10
、20
、30
を参照しています。 - 引数の数
・$#
により、関数に渡された引数の数が3
と表示されています。 - スクリプト名の表示
・$0
はスクリプト名./func-parameters.sh
を示しています。
コマンドライン引数との関係
スクリプト自体にコマンドライン引数を渡しても、関数内の位置パラメータには影響しません。
例:スクリプトに引数を渡して実行
user01@ubuntu:~$ ./func-parameters.sh arg1 arg2
実行結果
数値1: 10
数値2: 20
数値3: 30
関数に渡された引数の数: 3
スクリプト名: ./func-parameters.sh
解説
- 関数
print_parameters
に渡された引数は変わらず10
、20
、30
です。 - スクリプトに渡した引数
arg1
、arg2
は、関数内の位置パラメータには影響を与えていません。
関数内での位置パラメータの動作
- 関数への引数
・関数を呼び出す際に渡した引数が、関数内の位置パラメータ$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
とは異なり、関数名にはなりません。 - 関数の活用
・同じ処理を繰り返し使う場合は、関数にまとめると効率的です。
・関数内での位置パラメータの扱いを理解することで、より柔軟なスクリプトが書けます。
シェル関数内での位置パラメータの扱いを正しく理解し、スクリプト作成に活用してみてください。