![]() |
BBv2で用いられるデータ型は文字列リストだけである。リストの要素は空白文字で区切られる。
foo foo bar 1 2 3 "if" ":" ";"
上記の各行は全て有効な文字列リストである。
変数は宣言なしに使用できる。変数の名前には制限はない。BBv2のキーワードを変数名に使う場合はクォーティングかエスケープ処理を施す。
# 変数aに文字列「1」を代入 a = 1 ; # 変数bが空なら文字列「hoge」を代入 b ?= hoge ; # 変数bに文字列「foo」と「bar」を追加 b += foo bar ; # 変数ifに文字列「else」を代入 "if" = else ;
代入文の前にlocalを付けると、スコープ内でのみ有効なローカル変数を定義できる。
# ローカル変数aに文字列「1」を代入 local a = 1 ; # ローカル変数には「?=」、「+=」は使えない #local b ?= hoge ; #local b += foo bar ;
トークン中の「$(変数名)」は対応する変数の値に展開される。変数の値が複数ある場合、変数値とと前後の文字列を連結した結果は直積になる。
A = a ; B = 1 2 ; C = x y z ; D = _$(A)_ ; # D = _a_ ; E = a$(B) ; # E = a1 a2 ; F = $(B)$(C) ; # F = 1x 2x 1y 2y 1z 2z ;
また次の表に示す修飾子を変数名の後ろに付けることで展開後の文字列を整形できる。
修飾子 | 効果 |
---|---|
[n] | n番目の要素のみ選択される |
[n-m] | n番目からm番目の要素のみ選択される |
[n-] | n番目以降の要素のみ選択される |
:U | 大文字にする |
:L | 小文字にする |
:G | グリスト部分を選択する |
:D | ディレクトリ部分を選択する |
:P | 親ディレクトリ部分を選択する |
:B | ベース名部分を選択する |
:S | 拡張子部分を選択する |
:M | アーカイブメンバ部分を選択する |
:T | 「\」を「/」に置換する |
:W | CygwinのパスをWindowsのパスに変換する (Cygwinのみ) |
:G=grist | グリスト部分をgristに置換する |
:R=root | パスが絶対パスでなければ、rootを先頭に追加する |
:D=dir | ディレクトリ部分をdirに置換する |
:B=base | ベース名部分をbaseに置換する |
:S=suf | 拡張子部分をsufに置換する |
:M=mem | アーカイブメンバ部分をmemに置換する |
:E=value | 変数の値が空の場合、valueに置換する |
:J=joinval | 変数の各値をjoinvalで区切って連結した文字列に置換する |
X = a b c; A = X[2] ; # A = b B = X[1-2] ; # B = a b C = X[2-] ; # C = b c D = X[-1] ; # D = c J = $(X:J=-) ; # J = a-b-c ; X = ABCdef ; U = $(X:U) ; # U = ABCDEF L = $(X:L) ; # L = abcdef ph = <grist>dir/base.suf(mem) ; G = $(ph:G) ; # G = <grist> P = $(ph:P) ; # P = <grist>dir D = $(ph:D) ; # D = dir B = $(ph:B) ; # B = base S = $(ph:S) ; # S = .suf M = $(ph:M) ; # M = (mem) G = $(ph:G=g) ; # G = <g>dir/base.suf(mem) R = $(ph:R=/) ; # R = <grist>/dir/base.suf(mem) D = $(ph:D=d) ; # D = <grist>d/base.suf(mem) B = $(ph:B=b) ; # B = <grist>dir/b.suf(mem) S = $(ph:S=.s) ; # S = <grist>dir/base.s(mem) M = $(ph:M=m) ; # M = <grist>dir/base.suf(m) ph = C:\\Windows\\System32 ; T = $(ph:T) ; # T = C:/Windows/System32 ph = /cygdrive/c/Windows W = $(ph:W) ; # W = C:\\Windows E = $(not_defined:E=default) ; # E = default