Section Next | Prev


3.2 環境変数および属性

シェル変数は、カレント・シェル内部(プロセス内だけで有効)だけの変数ですが、 環境変数は子プロセスにその内容が引き継がれます。

既に定義されているシェル変数はexport により環境変数として宣言する事ができます。
printenv または env コマンドにより環境変数の一覧を表示します。 引き数なしのset はシェル、環境変数の両方を表示します。

変数名=変数値# 一旦シェル変数を定義し
export 変数名# 環境変数にする
export 変数名=変数値# 同時に行うことも可能
	$ export aaa="sore sore"
	$ env | grep aaa
	aaa=sore sore
また シェル変数、環境変数は全て同じ領域に確保され、フラグにより属性が決定して います。
よって引き数なしのset は、こらら全てを表示します。
	$ set
	CDAPATH=.:/usr/jsy/bin:/usr/bin	# 環境変数
	DISPLAY=:0
	HOME=/usr/home/yakoshi
		:
	a=2				# シェル変数
	b=4
	d1=/proj1/ycos1
	d2=/proj2/ycos2
	d3=/proj3/ycos

慣習的に環境変数は大文字で定義することが多いようです。

変数の属性

bash では変数の参照範囲(スコープと呼びます)の違いから、シェル変数と環境変数に 分かれていましたが、これは変数の属性として定義されています。
シェル変数の属性を指定するためにはdeclareを用います。
	$ declare -x DATA="abc def"
	$ env | grep DATA
	DATA=abc def
付与した属性を取り外すには、オプション指定のハイフン(-)に代えて、 プラス(+)を用います。
	$ declare +x DATA
	$ env | grep DATA
declareは、読込専用(書込不可)属性をつけることもできます。 ただし一旦、読込専用とした変数には修正を加えることができないので、 注意が必要です。
	$ declare -r DATA
	$ DATA=123
	bash: DATA: readonly variable	

事前定義変数

シェルにはあらかじめ組み込まれた変数があり、現在のディレクトリやプロセスIDなどの 状況を表したり、値を変更することでシェル自体の動作を制御することが可能となっています。
下記は主な事前定義変数です。

変数名意味
動作環境を示す変数
$シェルのプロセスID
HOMEホーム・ディレクトリ
HOSTNAMEホスト名
OLDPWD直前にいたディレクトリ
PATH入力されたコマンドをシェルが検索するディレクトリの順番
PPIDシェルの親プロセスID
PWDカレント・ディレクトリ
SHELLカレント・シェルのファイル名(/bin/bash)
TERM端末の型式名(xterm, vt100など)
USERログイン・ユーザ名
シェルの動作を制御する変数
EDITOR コマンドライン編集で使用するエディタ名
FCEDIT フルスクリーンでコマンドを編集する時のエディタ名
HISTSIZE 記憶するコマンド履歴の最大数
IGNOREEOFEOF(^D)を入力してもログアウトしない。
LANGman やエラーメッセージの表示言語の切替え。 (C, ja_JP.eucJP など)
TMOUT指定された秒数の間、何も操作されなかった場合シェルを終了する(タイムアウト)
その他
PS1プロンプト(デフォルトは'$')
PS2継続行のプロンプト(デフォルトは '>')
PS3select文のプロンプト(デフォルトは '#? ')
PS4デバッグモードのプロンプト(デフォルトは '#? ')
RANDOM 乱数 (範囲0〜32767)

簡単な例
	$ echo "pid=$$, ppid=$PPID"
	pid=954, ppid=746
	$ echo "Welcome $USER-san"
	Welcome ycos-san
プロンプト(PS1,PS2など)に使うことができる特別なキーワード
キーワード意味
\h, \Hホスト名(省略形が \h、FQDNは \H)
\uユーザ名
\w, \W作業ディレクトリ (絶対パス表記が \w, 最後のサブディレクトリのみ表記は \W)
\!コマンド履歴番号(!nnn で呼出可能)
\$通貨記号(ドルマーク)
プロンプトの変更例
	$ PS1="[\! \w]\$ "
	[1024 ~]$ PS2="\e[33m>\e[00m "
	[1025 ~]$ ls \
	> .
	Desktop Mail public_html
補足) 一時的な環境変数変更
env コマンドにより、コマンド実行時のみ環境変数を指定できます。
	$ env LANG=C man ls	# 英語版のマニュアル表示

Section Next | Prev

Copyright 2007-2018 ycosSystems Shell/Body32.html