Section Next | Prev


3.1 シェル変数

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

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

	[student@h006 ~]$ arry[3]=three
	[student@h006 ~]$ 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 と後方一致する全部分の削除

	[student@h006 ~]$ unset a ; b="sore"
	[student@h006 ~]$ echo ${a:-xxx}/${b:-yyy}
	xxx/sore

	[student@h006 ~]$ a= ; b="hoge"
	[student@h006 ~]$ echo "${a:=aaa} ${b:=bbb}"
	aaa hoge
	[student@h006 ~]$ echo $a $b
	aaa hoge

	[student@h006 ~]$ a=
	[student@h006 ~]$ echo ${a:?"not set"}
	a: not set

	[student@h006 ~]$ a=a/b/c ; b=a/b/c
	[student@h006 ~]$ echo ${a%/*} ${a%%/*} ${b#*/} ${b##*/}
	a/b a b/c c

Section Next | Prev

Copyright 2007-2018 ycosSystems Shell/Body31.html