Linux/シェルスクリプト/変数

Linux/シェルスクリプト/変数

代入

操作上としてはこれは変数への代入では無い。 変数を作るという概念はなくて感覚としてはラベル付きで値を発生させるとも言おうか。 ということなので他の言語のように変数だけ作るという動作は無い。

HOGE='ほげ'

このように記述する。「ほげ」に「HOGE」というラベルをくっつけてますよという HOGE とほげが一体になったものを生成しているという感じ。

イコールの前後にスペースを入れるとダメだよ

この変数名は慣例として大文字で表記することが多いようだ。

変数から値を取り出す

変数から値を取り出すには

HOGE='ほげ'
echo ${HOGE}

と書く。$はキーから対応する値を引く解決演算子と思えばいいだろう。 括弧は省略可能だがキーの範囲を明確にするためにつける。なぜならキーと値のリテラルに見た目上の区別はないから

スコープ

空間の種類

  • 実行されている(対話的なUIがくっついている)シェル
  • シェルスクリプトファイル

ファイルスコープ

とりあえずシェルスクリプトが書いてあるファイルのトップレベルで作られた変数は、そのファイル内ならどこからでも見ることができる。

なのでシェルスクリプトの途中で別のシェルスクリプトファイルを単純に実行したとしても、そのシェルスクリプト内からは呼び出し側の変数を見ることができない。

これは逆も成り立っていて、呼び出され側で作られた変数も呼び出し側は見ることができない。

ファイルスコープの連結

このファイルスコープを連結する方法があって、「.(dot)」ドットコマンドで対処のファイルを呼び出して実行するとファイルスコープが連結される。

こうすると相互に連結されて、呼び出し側で呼び出され側の変数を読むことが可能になりその逆も可能になる。

グローバル?

このように作った場合は、スクリプトとしてはグローバルなんだけど、このスコープはシェルスクリプト内部で閉じている

HOGE="ほげ"

外部環境へ持ち出す

exportすることで1個外側へ持ち出すことができる?

HOGE="ほげ"
export HOGE

使う側が引き込む

exportを使っても、与える影響は呼び出されているスクリプトのシェル内部に閉じ込められる。というかスクリプトが起動されるたびに、サブシェルが新たに作られて、終了すると破棄される。

使う側が .(ドット)コマンドを使うと、自分の環境への影響を永続化することができる。つまり使う側の任意で環境を引き込むことができる。

↑のスクリプトが hoge.sh という名前なら

. hoge.sh

と呼び出すことでHOGE変数を自分の現在実行シェルの中に引き込むことができる。

環境設定ファイルを ドットコマンドやsourceコマンドで読み込むのは、こういう理由だったのね

関数スコープ

local というキーワードをつけて変数宣言するとその変数は関数ローカルとして扱われる。

linux/shell_script/variable.txt · 最終更新: 2019-08-27 15:41 by ore