【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」の文字列をスクリプト内から絶滅させましたとさ。
それだけです。
この記事が気に入ったらサポートをしてみませんか?