subst -
バックスラッシュ、コマンドまた変数の置き換えを行います。
subst ?-nobackslashes? ?-nocommands? ?-novariables? string
本コマンドはstring 引数で変数置き換え、コマンド置き換え、バック
スラッシュ置き換えを行い、完全に置き換え得た結果
を返します。置き換えはTclのコマンドとちょうど同じ方法で行なわれます。
結果として、string 引数は実際2回置き換えられます。TclのパーサーによってTclのコマンドの普通の方法で1回置き換えされ、subst
コマンドによってもう一度置き換えられます。
-nobackslashes、-nocommandsまたは-novariablesのうちのいずれかが指定されると、対応する置き換えは行われません。
例えば、-nocommandsが指定された場合、コマンド置き換えは遂行されません。左右の大括弧
は特別の説明がなければ普通の文字として扱われます。
1種類の置き換えが別の種類の置き換えを含むことができることにご注目ください。例えば、-novariablesオプションが指定されても、
コマンド置き換えは制限なしで行われます。これはコマンド置き換えを完成するために必要なあらゆる変数置き換えが依然、行われることを意味します。同様に、-nocommandsが指定されても、変数置き換えを完成するために必要なあらゆるコマンド置き換えは行われます。下のセクションの例を参照してください。
エラーが置き換え中に発生すれば、substはそのエラーを返します。コマンドまたは変数置き換えの際にbreak例外が発生すると、全置き換えの結果
は、例外を引き起こした置き換えが開始するまでに置き換えられた結果文字列になります。
コマンドや変数置き換えの評価中にcontinue例外が発生すると、その全コマンドまたは変数置き換え(
適格なTcl文である限り )の結果は、空の文字列になります。return
例外が発生する場合や、他のリターンコードがコマンドや変数置き換えの最中に返されると、返された値はその置き換えた結果
になります。 下のセクション例
を参照してください。こうすれば、全ての例外的なリターンコードはsubstによって捕えられます。
substコマンドは、エラーを返さない限り終了します。
置き換えが行われているとき、substは二重引用符や中括弧(コマンド置き換え中を除いて)を特別扱をしません。従って、スクリプト
set a 44
subst {xyz {$a}}
は”xyz { $a }”ではなく”xyz { 44 }”を返します。そしてスクリプト
set a "p\} q \{r"
subst {xyz {$a}}
は”xyz { p\ } q \{r}”でなく”xyz {p} q {r}”を返します。
コマンド置き換えが行われるとき、スクリプトを評価するために必要なあらゆる変数置き換えも行われます。
set a 44
subst -novariables {$a [format $a]}
は”$a $a”ではなく”$a 44”を返します。同様に、変数置き換えが行われるとき、変数の値を検索するために必要なあらゆるコマンド置き換えも行います。
proc b {} {return c}
array set a {c c [b] tricky}
subst -nocommands {[b] $a([b])}
は”[b] tricky”ではなく”[b] c”を返します。
continueとbreak例外により、コマンド置き換えは、コマンド置き換えの残り、及びstring
の残りを置き換えすることを防げ、substを使ってテキストを処理する際により多くの選択権をスクリプト作成者に与えます。
例えば、スクリプト
subst {abc,[break],def}
は”abc,,def”ではなく、”abc”を返します。そしてスクリプト、
subst {abc,[continue;expr 1+2],def}
は"abc,3,def"ではなく"abc,,def"を返します。
他の例外のリターンコードは返された値を置き換え結果にします。
subst {abc,[return foo;expr 1+2],def}
は"abc,3,def"ではなく"abc,foo,def"を返します。そして、
subst {abc,[return -code 10 foo;expr 1+2],def}
も"abc,3,def"ではなく"abc,foo,def"を返します。
Tcl, eval, break, continue
backslash substitution, command substitution, variable substitution
Copyright © 1994 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.
Copyright © 2001 Donal K. Fellows
Copyright © 1995-1997 Roger E. Critchlow Jr.
|