やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

シェルのプロセスと変数のスコープについて

 なんとなく把握したつもり。

スコープ

 変数のスコープは以下の3階層ある。

  • マシン
    • プロセス
      • 関数

メモリ空間

 異なるマシンは異なる物理メモリを持っている。共有するにはネットワーク接続せねばならない?

┌マシンA───┐
│環境変数A=0│
└───────┘
┌マシンB───┐
│環境変数A=1│
└───────┘

 同一マシンは異なるプロセスを持てる。共有するには環境変数にせねばならない。exportdeclare -xで宣言する。

┌マシンA───┐
│環境変数A=0│
│┌プロセスA┐│
││変数A=1││
│└─────┘│
│┌プロセスB┐│
││変数A=2││
│└─────┘│
└───────┘

 変数はプロセス内ならどこでも共有できる。異なる関数内であっても。逆にスコープを関数内のみにするにはlocaldeclareで宣言せねばならない。

┌プロセスA──┐
│変数A=1  │
│┌関数あ──┐│
││変数A=あ││
│└─────┘│
│┌関数い──┐│
││変数A=い││
│└─────┘│
└───────┘

 スコープが異なる同名の変数を参照しようとしたときは、スコープが狭いものが参照される。

┌マシンA─────┐
│環境変数A=0  │
│┌プロセスA──┐│
││変数A=1  ││
││┌関数あ──┐││
││|変数A=あ│││
││└─────┘││
│└───────┘│
└─────────┘

所感

 フォントが等幅にならず崩れる…….。VLゴシック指定したらアルファベットすら崩れた。どうすればいいの?