シェルで定数宣言をする方法

シェルで定数宣言をする方法

シェルスクリプトでは、変数を定数として扱うためにいくつかの方法があります。
特に、定数として変数を設定し、それを変更不可能にすることがよく求められます。

1. readonly コマンドを使う

シェルで定数を宣言する最も一般的な方法は、readonly コマンドを使うことです。
このコマンドは変数を読み取り専用に設定し、その後のスクリプトで変数の値を変更できなくします。

例:
#!/bin/bash

# 定数を宣言
readonly MY_CONSTANT="Hello, World!"

# 試しに値を変更しようとするとエラーが発生
MY_CONSTANT="New Value"  # エラー: MY_CONSTANT: readonly variable

# 定数の値を表示
echo $MY_CONSTANT

このスクリプトでは、MY_CONSTANT を宣言し、readonly コマンドを使ってその値を固定します。
その後、MY_CONSTANT を変更しようとするとエラーが発生します。

2. declare -r を使う

Bash では、declare コマンドを使って変数を宣言することができます。

  • r オプションを付けると、その変数を読み取り専用に設定できます。

これにより、readonly コマンドと同様に、変数を定数として扱えます。

例:
#!/bin/bash

# 定数を宣言
declare -r MY_CONSTANT="Hello, World!"

# 試しに値を変更しようとするとエラーが発生
MY_CONSTANT="New Value"  # エラー: MY_CONSTANT: readonly variable

# 定数の値を表示
echo $MY_CONSTANT

declare -r を使用する方法も readonly と同じように動作します。

3. 環境変数としてエクスポートする

シェルスクリプトでは、環境変数として定数を宣言することもできます。
環境変数は他のプロセスに継承されるため、スクリプト内で定数として使う場合に便利です。
ただし、環境変数自体は読み取り専用にはなりませんので、readonly も併用する必要があります。

例:
#!/bin/bash

# 環境変数として定数を宣言
export MY_CONSTANT="Hello, World!"
readonly MY_CONSTANT

# 試しに値を変更しようとするとエラーが発生
MY_CONSTANT="New Value"  # エラー: MY_CONSTANT: readonly variable

# 定数の値を表示
echo $MY_CONSTANT

この方法では、変数がエクスポートされ、シェルセッション内で使用できますが、変更が不可能になります。

注意点

  • Bash のバージョン:

Bash スクリプトで定数を扱う際には、Bash のバージョンに依存する場合があります。
例えば、readonly や declare -r は POSIX 準拠のシェルでも動作しますが、一部のオプションは特定のシェルにのみ対応している場合があります。

  • 変更不可能性:

定数として宣言された変数は、スクリプトの中で再定義されることはありません。
ただし、定数を間違えて再定義しようとすると、エラーメッセージが表示されます。

まとめ

シェルスクリプトで定数を宣言するためには、readonly や declare -r を使用するのが一般的です。
これらのコマンドを使うことで、変数が誤って変更されるのを防ぐことができ、スクリプトの信頼性を向上させることができます。