2009年10月22日木曜日

【復習】3.1.3.シェル変数と環境変数

・シェル変数の有効範囲は、その変数を定義したシェルのみになる。
・環境変数は、その変数を定義したシェル上、及びそのシェルで実行されるプログラムからも参照する事のできる変数。
・環境変数は、シェル変数を export コマンドでエクスポートすることによって設定できる。
ubuntu@ubuntu-laptop:~$ EV=world     > シェル変数を定義。
ubuntu@ubuntu-laptop:~$ SV=local     > シェル変数を定義。
ubuntu@ubuntu-laptop:~$ export EV     > エクスポートした。
ubuntu@ubuntu-laptop:~$ bash       > 新しくシェルを起動。
ubuntu@ubuntu-laptop:~$ echo $EV     > EVの内容を表示。
world                   > 「world」が表示した。
ubuntu@ubuntu-laptop:~$ echo $SV     > SVの内容を表示。 

ubuntu@ubuntu-laptop:~$          > ↑SVはエクスポートしていないので、表示されない。
ubuntu@ubuntu-laptop:~$ $EV=new world   > EVを「new world」で定義・・・。
bash: world=new: command not found     > できなかった。
ubuntu@ubuntu-laptop:~$ $EV="new world"  > 「”」をつけてみた。
bash: world=new world: command not found  > できなかった。
ubuntu@ubuntu-laptop:~$ EV=new world    > 先頭の「$」が不要なことに気づき、再度やった・・・。
bash: world: command not found       > が、できなかった。
ubuntu@ubuntu-laptop:~$ EV="new world"   > 「”」をつけて、定義した。
ubuntu@ubuntu-laptop:~$           > できた。
ubuntu@ubuntu-laptop:~$ echo $EV      > 表示すると、
new world
ubuntu@ubuntu-laptop:~$           > ↑変更した内容で表示された。
ubuntu@ubuntu-laptop:~$ exit        > このシェルから抜ける。
exit
ubuntu@ubuntu-laptop:~$           > 戻った。
ubuntu@ubuntu-laptop:~$ echo $EV      > EVの内容を表示する。
world
ubuntu@ubuntu-laptop:~$           > 元のまま。子のプロセスでの変更は反映されていない。

・主な環境変数
 PATH : コマンドやプログラムを検索するディレクトリリスト
 PWD : カレントディレクトリ
 HOSTNAME :ホスト名
 USER : 現在のユーザー
 LANG : ロケール
 HOME : カレントユーザーのホームディレクトリ
 LOGNAME : ログインシェルのユーザー名
 PS1 : プロンプトの表示文字列
 PS2 : 複数行に渡る入力時のプロンプト
 HISTSIZE : コマンド履歴の最大値
 HISTFILE : コマンド履歴を格納するファイル
 TERM : 端末の種類(端末エミュレータ、ktermやrxvtなど)
(参考:termcapというデータベースを使って、端末の種類に応じてエスケープシーケンスを使い分けれる。)

・変数は、英字、数字、アンダーバー、OK。先頭に数字はできない。大文字、小文字は区別される。
 書式) 変数名=値
 ※「=」の前後にスペースが入らないように注意。
・定義された変数は、echoコマンドで参照できる。(「$」を先頭に付ける。)
 書式) echo [$変数名または文字列]
・unsetコマンド : 変数を削除する。
 書式) unset 変数名
・envコマンド、printenvコマンド : 定義されている環境変数を一覧表示する。
・setコマンド : 環境変数とシェル変数を両方表示する。
・exportコマンド : エクスポートすることで、新たに起動したシェルからシェル変数が参照できる。
 書式) export 変数名[=値]
ubuntu@ubuntu-laptop:~$ export EV=world2   > 1行でエクスポートと変数を定義する。
 ※変数を定義するときは、「$」は不要。
 ※変数を参照するときは、「$」は必要。

■感想:変数を定義するときにスペースを入れたら、エラーが出て焦った。「"」でスペース入りでも定義できたけど、まぁ、ビックリした。

0 件のコメント:

コメントを投稿