見出し画像

【0058】localだとかdeclareだとか

以前に、
localにdeclareと一緒になんかオプションをつけるとエラーになるの
なんでだろ
とかいう記事をどこかに書いた気がします。

そもそもbashにおけるlocalとかdeclareのことを
ちゃんと理解していなかったわけですが

調べてみるとこのワードの周辺では
・変数スコープを絞る
・読み取り専用の変数を作る
方法として語られることが多いようです。

その際に
スコープ絞りとして
・local
・declare
読み取り専用変数として
・local -r
・declare -r
が登場します。

また少し面倒なところで、
スコープ界隈の話で
・declare -g
読み取り専用変数として
・readonly

また、それとは別に変数の定義として
・typeset
というのも出てきて
マジで混乱します。

どちらにしても一つ言えることは、

「local」と「declare」を重ねて使う意味はない

ということですね。

私は
「local」→スコープの絞り込み
「declare」→変数の明示的な宣言、他になんか色々おぷよんもある
程度に思っていたので、
ローカル変数を作ろうとして

declare local -option Name

とかアホな記載をしていたわけです。

いやこの段階ではまだアホかどうかはわからないんですが、
どうも

declareで宣言した変数は
そもそもオプションとかなしにローカルになるらしいです。

あ、そっすか。
そうだとわかればかんたんな話なわけですが。

ローカル変数を定義したくてdeclareと併記していたlocalの記載は
全部要らないらしいです。

また、グローバル変数を宣言する際には元から
declare -g
を使っていたため、この点も問題ありません。

readonlyは使っていませんでした(readonlyな変数はdeclare -r -gしていた)。
typesetは使っていませんでした。

なお、特にオプション指定しないdeclareの場合
明示的にdeclareと書いて変数定義するのも
特に何も書かずに突然変数名を登場させるのも
特に機能に違いはないそうです。

ですがまあ、個人的に変数は明示的に宣言したいので
オプションのないdeclareも残します。

というわけで、「local」の文字列をスクリプト内から絶滅させましたとさ。


それだけです。

この記事が気に入ったらサポートをしてみませんか?