これはなに
シェルスクリプトにおいて変数を定義する際に、個人的に気を付けている点のまとめ。シェルスクリプトを書く際に毎回調べている気がするのでまとめておく。
変数の定義方法
変数を定義する際には、以下の点に気を付けよう。
変数名に空白文字を使わない
変数名と値の間には空白文字(スペースやタブ)を入れないようにしよう。変数の定義では、=
の前後に空白文字があるとエラーが発生する。
例 : variable_name=value
(正)、variable_name = value
(誤)。
変数名のルールを守る
変数名は英字(大文字・小文字)で始め、英字、数字、アンダースコアが続くようにしよう。変数名に空白文字や特殊文字、ハイフンを使用しないこと。
予約語を回避する
シェルや環境変数で予約されている語を変数名として使用しない。たとえば、PATH
、HOME
などは予約語であるため、変数名に使用することは避けよう。
関数内の変数はローカル変数を使う
関数内でのみ使用する変数は、local
キーワードを使ってローカル変数として宣言する。これによって、スクリプト内で変数名が衝突することを防げる。
適切なスコープで変数を定義することは重要である。関数外で宣言された変数は、グローバルスコープになるため、スクリプト全体で参照できる。よって、グローバル変数を使用する場合は、名前の衝突に注意しなければならない。
変数をダブルクオートで展開する
変数を展開する際には、空白文字を含む値が正しく展開されるように、ダブルクオートで囲む。例 : echo "$variable_name"
。特殊文字(e.g. $
, \
)を含む場合はエスケープする必要がある。
未定義変数の参照でエラーを発生させる
スクリプト内で未定義の変数が参照されると、予期しない挙動を引き起こすことがある。そのため、set -u
を使用し、未定義変数が参照された際にエラーが発生するようにしよう。
定数は大文字で定義し、readonly
をつける
変更されるべきでない値は、大文字の変数名で定義し、変数名に readonly
を付けて、値が変更されないようにする。例 : readonly API_KEY="your_api_key"
。
まとめ
シェルスクリプトにおいて、変数の定義方法には注意が必要である。本記事では、変数の定義方法と注意点について解説した。正しい変数の使い方を身につけ、スクリプトを安定的に動作させよう。