Cシェルの変数の基本的なことは、
シェルスクリプトの変数
を参照してもらって、ここではもう少し進んだことを述べてみよう。
シェルの変数には、数字でも文字列でも、そのまま代入できるが、
その代入された変数を、他の変数に組み合わせて代入することもできる。
# set x = 2 # set y = test # set z = $y$x # echo $z test2
そして、変数の値はコマンドの引数として使用できる。
# cc $z.c <-- cc test2.c と同じ
しかし、変数を他の文字列と組み合わせる時には、注意が必要となる。
例えば、kadai10.ppm という文字列を tmp という変数に代入しようとして、
変数fileとの組合せでやろうとした時
# set file = kadai # set tmp = $file10.ppm file10 : Undefined Variable
とやると、上のように Undefined Variable というエラーメッセージが出て失敗する。
これは、シェルが $file10 が変数名だと考えて、そんな変数は定義されていない、といっているので
ちゃんと file までが変数名だと、教えてやれば良い。
そのためには{}を使用する。
# set tmp = ${file}10.ppm
これで、{}で囲まれた file の部分が、変数名だとわかるので、正しく tmp に kadai10.ppm が代入される。
この{}が必要なのは、変数名のすぐ後に英数字が来る時だけである。
それ以外の文字が来る時(ドルマーク$, ピリオド. など)の時は必要無い。
変数にファイル名などが入っている場合、そこからパス名や拡張子の部分を取り去ったりしたいことがある。
そのような場合には、変数に:をつけることによってパス名・ファイル名から各部分を
削除・変更できる。
# set name = /aaa/bbb/ccc.ddd # echo $name:r /aaa/bbb/ccc # echo $name:h /aaa/bbb # echo $name:e ddd # echo $name:t ccc.ddd