今回のポイント
- 変数への代入は空白を入れてはいけない
- 変数の値を参照するときは
$
を先頭につける - シェル変数はそのプロセス内だけ、環境変数は子プロセスからも参照できる
それでは、シェルスクリプトでの変数の扱い方を覚えていきましょう。
変数への代入
シェルスクリプトで変数に値を代入するときには、以下のような形式で記述します。
1 |
$ var1=100 |
var1
が変数名、100
が代入値である。
注意しないといけないのは、間に空白を挟んではいけないことだ。
つまり、
1 |
$ var1 = 100 |
こういうのは駄目
また、代入値で途中に空白があってもいけない
つまり、
1 |
$ var1=hello world |
こういうのも駄目
もし、スペースを入れたい場合は'(シングルクォーテーション)
か"(ダブルクオーテーション)
で囲まないと行けない
つまり、
1 |
$ var1='hello world' |
これならOK
変数の値を参照する
変数に値を代入できたら、次はそれを出力してみよう。
シェルスクリプトでは、変数名に$
をつけることでその値を取り出すことができる。
1 2 3 |
$ var1=100 $ echo $var1 100 |
変数以外の文字列と連結して出力したい場合だと、変数とそれ以外の文字との区別をしなければいけない。
例えば、var1
に0を2つつけて出力したい場合
1 |
$ echo $var100 |
では$var100
という変数名の値を出力しようとしてしまい、その変数に対して代入は行っていないから何も出力はされないはず。
こういう場合は変数名を{}
で囲って上げれば変数とその他の文字列の区別をして出力することができる。
1 2 |
$ echo ${var1}00 10000 |
シェル変数と環境変数
シェル変数とは現在動いているプロセスでしか参照できない変数なので、配下で別のプロセスで変数の値を呼び出すことができない。
一方で環境変数は配下のプロセスでもその値を参照することが可能である。
環境変数の例として、LANG
というのがある。
下のブログラムファイルを作成して、実行してみれば値に代入していないのに、参照が可能なのが分かる。
echo-lang.sh
1 2 3 |
#!/bin/bash echo $LANG |
実行、
1 2 |
$ bash echo-lang.sh ja_JP.UTF-8 |
一方、普通にシェル変数を宣言しただけでは、配下のプロセスでは値は引き継げない。
echo-shell-value.sh
1 2 3 |
#!/bin/bash echo $var1 |
呼び出す前にvar1に値を代入して実行、
1 2 |
$ var1=100 $ bash echo-shell-value.sh |
var1
の内容は出力されなかった。
出力させたい場合は、環境変数にしなければいけない。
方法は簡単でexport 変数名
を実行するだけである。
1 2 3 |
$ export var1 $ bash echo-shell-value.sh 100 |
シェルスクリプト内で別のシェルスクリプトを呼び出すときにも、これは使える。
例えば、
parent.sh
1 2 3 4 5 |
#!/bin/bash var1=100 export var1 bash ./child.sh |
child.sh
1 2 3 |
#!/bin/bash echo $var1 |
parent.sh
からchild.sh
を呼び出して、var1
の値が出力されているのが確認できる。
1 2 |
$ bash parent.sh 100 |
まとめ
- 変数の代入は
変数名=代入値
で間にスペースを入れては駄目 - 変数の出力は
$変数名
でその他文字列との区別をしたいときは、${変数名}
とする。 - シェル変数は配下のプロセスでは値を引き継げないので、
export 変数名
で環境変数にすることで出力できるようになる。