BLOG
ブログ
  • TOP
  • BLOG
  • Bashにおける変数のスコープ

Bashにおける変数のスコープ

Bashにおける変数のスコープ

CONTENT

今回のブログでは「bash」についてご紹介します!

bash は多くの linux 系OSで使用可能な「シェル」です。

シェルとは…コンピューターのオペレーティングシステム(OS)とユーザーの間のインターフェースのことで、特に、コマンドを入力して実行するためのプログラムを指します。


■シェル変数

bash ではコマンドラインを利用して、次のように変数の登録と参照が可能です。

```
   $ x=abc
   $ echo $x
 abc
```

多くのプログラム言語とは異なり、ご覧のように入力時と参照時では変数へのアクセス方法が変わります。入力時には「$」が付きませんが、参照時には「$」が必要になります。


■シェル変数とサブプロセス

この変数はサブプロセスからは参照することはできません。シェルスクリプトの実行は bash のサブプロセスとなりますので、試してみましょう。


```
  $ vi bin/echo-x
  $ chmod a+x bin/echo-x
  $ cat bin/echo-x
#!/usr/bin/bash
echo $x
     $ echo-x

```

実行しても何も出力されません。
なお、プロセスの親子関係は ps コマンドを用いて確認することができます。


```
$ ps --forest
   PID TTY          TIME CMD
   165 pts/1    00:00:00 bash
   202 pts/1    00:00:00  \_ echo-x
   204 pts/1    00:00:00  \_ ps

```

確認に用いた ps コマンドも bash のサブプロセスであることがわかります。


■環境変数

定義したシェルの変数を export コマンドで環境変数とすることで、サブプロセスからも参照することができるようになります。

```
  $ export x
  $ echo-x
abc
```

シェル変数に戻すこともできます。

```
 $ export -n x
 $ echo-x

```

■関数

シェルでは関数を定義することもできます。関数からはシェル変数の参照が可能です。

```
 $ echoX(){
> echo $x
> }
 $ echoX
abc
```

環境変数も参照できます。

```
 $ export x
 $ echoX
abc
```


■まとめ

- 変数にはシェル変数と環境変数がある
- export コマンドで変数はシェル変数と環境変数のどちらにも設定できる
- サブプロセスであるシェルスクリプトからシェル変数は参照できないが、環境変数は参照できる
- 関数からはどちらの変数も参照できる


```
  $ x=abc
  $ echo $x
abc
  $ echo-x

  $ echoX
abc
  $ export x
  $x=abc
  $ echo-x
abc
  $ echoX
abc
```


いかがでしたでしょうか?参考になれば幸いです。

なお、今回の検証に使用した環境はこちらになります。


```
 $ cat /etc/rocky-release
Rocky Linux release 9.3 (Blue Onyx)

 $ bash --version
GNU bash, version 5.1.8(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later<http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

```