Section Next | Prev


3.1 シェル変数

シェルには、値として文字列または数字を含む変数があります。変数名は英字で始まり 英字、数字、アンダースコアで表される文字列です。 シェル変数の定義は等号を用いて次の様に行ないます。
	変数名=変数値
変数値は省略する事ができ、その時変数にはヌル(空白)が定義されます。 変数を参照するには(変数を評価するには)、変数名の前にドル記号($)をつけます。 定義した変数の一覧は、引き数なしの set コマンドを用います。

$ t=tanaka# シェル変数の定義
$ echo $t# 変数値への置換
tanaka
$ echo ${t}ichirou# 変数名の後に文字列を続けて表示
tanakaichirou
$ t2=$t# 別のシェル変数に代入
$ echo $t2
tanaka
$ unset t# 定義した変数の取り消し
$ echo "[$t][$t2]"
[][tanaka]# ない変数は NULL が返る
$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i686-pc-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLORTERM=
COLUMNS=86
:
配列への値代入は小括弧()内に空白で値を区切って、一括しておこなう複合代入式を用います。 ここの要素を参照するには配列の添字を大括弧[]で指定し、全体を中括弧{}で囲みます。
	$ arry=(one two tree)
	$ set  |grep ^arry	# 環境変数のうち arry で始まるものを表示
	arry=([0]="one" [1]="two" [2]="tree")
	$ echo ${arry[1]}
	two
配列の全要素を指定する場合は添字にアスタリスク(*)またはアットマーク(@)を用います。
下記の例では、既にされている配列 arry の先頭(添え字0)へ要素を追加しています。
	$ arry=(zero ${arry[*]})
	$ set  |grep ^arry
	arry=([0]="zero" [1]="one" [2]="two" [3]="tree")

	$ arry[3]=three
	$ set  |grep ^arry
	arry=([0]="zero" [1]="one" [2]="two" [3]="three")

補足) 変数の条件付置換
変数の設定内容により、その値を置換えることができます。
	${変数名 式 値}
式には次のものがあります。
意味
val:-str 変数 val が空の場合 str を返す
val:=str 変数 val が空の場合 str を val に代入
val:+str 変数 val に値がある場合 str を返す
val:?"msg" 変数 val が空の場合 msg を表示する。
val#ptn 変数 val について ptn と前方一致する部分の削除
val##ptn 変数 val について ptn と前方一致する全部分の削除
val%ptn 変数 val について ptn と後方一致する部分の削除
val%%ptn 変数 val について ptn と後方一致する全部分の削除

	$ unset a ; b="sore"
	$ echo "${a:-xxx}/${b:-yyy}"
	xxx/sore

	$ a= ; b="hoge"
	$ echo "${a:=aaa} ${b:=bbb}"
	aaa hoge
	$ echo $a $b
	aaa hoge

	$ a=
	$ echo ${a:?"not set"}
	a: not set

	$ a=a/b/c ; b=a/b/c
	$ echo ${a%/*} ${a%%/*} ${b#*/} ${b##*/}
	a/b a b/c c
式には次のものがあります。

Section Next | Prev

Copyright 2007-2018 ycosSystems Shell/Body31.html
意味
val:-str 変数 val が空の場合 str を返す
val:=str 変数 val が空の場合 str を val に代入
val:+str 変数 val に値がある場合 str を返す
val:?"msg" 変数 val が空の場合 msg を表示する。
val#ptn 変数 val について ptn と前方一致する部分の削除
val##ptn 変数 val について ptn と前方一致する全部分の削除